Java中joda日期格式化工具的使用示例
1.基本介绍
Java自带日期格式化工具DateFormat,但是DateFormat的所有实现,包括SimpleDateFormat都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如将SimpleDateFormat限制在ThreadLocal中。如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。因此,从日期、时间处理的所有实践来说,我强力推荐使用joda-time库。
2.joda-time的使用
引入依赖
joda-time joda-time 2.10.5
编写测试类
publicclassDateUtils{
publicstaticfinallongSECOND=1000;//1秒java已毫秒为单位
publicstaticfinallongMINUTE=SECOND*60;//一分钟
publicstaticfinallongHOUR=MINUTE*60;//一小时
publicstaticfinallongDAY=HOUR*24;//一天
publicstaticfinallongWEEK=DAY*7;//一周
publicstaticfinallongYEAR=DAY*365;//一年
publicstaticfinalStringFORMAT_TIME="yyyy-MM-ddHH:mm:ss";//默认时间格式
publicstaticfinalStringFORMAT_TIME_MINUTE="yyyy-MM-ddHH:mm";//默认时间格式
publicstaticfinalStringFORTER_DATE="yyyy-MM-dd";//默认日期格式
privatestaticfinalMapWEEK_DAY=newHashMap();
static{
WEEK_DAY.put(7,"星期六");
WEEK_DAY.put(1,"星期天");
WEEK_DAY.put(2,"星期一");
WEEK_DAY.put(3,"星期二");
WEEK_DAY.put(4,"星期三");
WEEK_DAY.put(5,"星期四");
WEEK_DAY.put(6,"星期五");
}
/**
*获取当前系统时间
*
*@returnyyyy-MM-ddHH:mm:ss
*/
publicstaticStringgetCurrentTime(){
DateTimedt=newDateTime();
Stringtime=dt.toString(FORMAT_TIME);
returntime;
}
/**
*获取系统当前时间按照指定格式返回
*
*@parampattern
*yyyy/MM/ddhh:mm:a
*@return
*/
publicstaticStringgetCurrentTimePattern(Stringpattern){
DateTimedt=newDateTime();
Stringtime=dt.toString(pattern);
returntime;
}
/**
*获取当前日期
*
*@return
*/
publicstaticStringgetCurrentDate(){
DateTimedt=newDateTime();
Stringdate=dt.toString(FORTER_DATE);
returndate;
}
/**
*获取当前日期按照指定格式
*
*@parampattern
*@return
*/
publicstaticStringgetCurrentDatePattern(Stringpattern){
DateTimedt=newDateTime();
Stringdate=dt.toString(pattern);
returndate;
}
/**
*按照时区转换时间
*
*@paramdate
*@paramtimeZone
*时区
*@paramparrten
*@return
*/
@Nullable
publicstaticStringformat(Datedate,TimeZonetimeZone,Stringparrten){
if(date==null){
returnnull;
}
SimpleDateFormatsdf=newSimpleDateFormat(parrten);
sdf.setTimeZone(timeZone);
returnsdf.format(date);
}
/**
*获取指定时间
*
*@paramyear
*年
*@parammonth
*月
*@paramday
*天
*@paramhour
*小时
*@paramminute
*分钟
*@paramseconds
*秒
*@returnyyyy-MM-ddHH:mm:ss
*/
publicstaticStringgetPointTime(Integeryear,Integermonth,Integerday,Integerhour,Integerminute,
Integerseconds){
DateTimedt=newDateTime(year,month,day,hour,minute,seconds);
Stringdate=dt.toString(FORMAT_TIME);
returndate;
}
/**
*
*@paramyear
*年
*@parammonth
*月
*@paramday
*天
*@paramhour
*小时
*@paramminute
*分钟
*@paramseconds
*秒
*@paramparrten
*自定义格式
*@returnparrten
*/
publicstaticStringgetPointTimePattern(Integeryear,Integermonth,Integerday,Integerhour,Integerminute,
Integerseconds,Stringparrten){
DateTimedt=newDateTime(year,month,day,hour,minute,seconds);
Stringdate=dt.toString(parrten);
returndate;
}
/**
*获取指定日期
*
*@paramyear
*@parammonth
*@paramday
*@return
*/
publicstaticStringgetPointDate(Integeryear,Integermonth,Integerday){
LocalDatedt=newLocalDate(year,month,day);
Stringdate=dt.toString(FORTER_DATE);
returndate;
}
/**
*获取指定日期返回指定格式
*
*@paramyear
*@parammonth
*@paramday
*@paramparrten
*@return
*/
publicstaticStringgetPointDatParrten(Integeryear,Integermonth,Integerday,Stringparrten){
LocalDatedt=newLocalDate(year,month,day);
Stringdate=dt.toString(parrten);
returndate;
}
/**
*获取当前是一周星期几
*
*@return
*/
publicstaticStringgetWeek(){
DateTimedts=newDateTime();
Stringweek=null;
switch(dts.getDayOfWeek()){
caseDateTimeConstants.SUNDAY:
week="星期日";
break;
caseDateTimeConstants.MONDAY:
week="星期一";
break;
caseDateTimeConstants.TUESDAY:
week="星期二";
break;
caseDateTimeConstants.WEDNESDAY:
week="星期三";
break;
caseDateTimeConstants.THURSDAY:
week="星期四";
break;
caseDateTimeConstants.FRIDAY:
week="星期五";
break;
caseDateTimeConstants.SATURDAY:
week="星期六";
default:
break;
}
returnweek;
}
/**
*获取指定时间是一周的星期几
*
*@paramyear
*@parammonth
*@paramday
*@return
*/
publicstaticStringgetWeekPoint(Integeryear,Integermonth,Integerday){
LocalDatedts=newLocalDate(year,month,day);
Stringweek=null;
switch(dts.getDayOfWeek()){
caseDateTimeConstants.SUNDAY:
week="星期日";
break;
caseDateTimeConstants.MONDAY:
week="星期一";
break;
caseDateTimeConstants.TUESDAY:
week="星期二";
break;
caseDateTimeConstants.WEDNESDAY:
week="星期三";
break;
caseDateTimeConstants.THURSDAY:
week="星期四";
break;
caseDateTimeConstants.FRIDAY:
week="星期五";
break;
caseDateTimeConstants.SATURDAY:
week="星期六";
break;
default:
break;
}
returnweek;
}
/**
*格式化日期
*
*@paramdate
*@returnyyyy-MM-ddHH:mm:ss
*/
@Nullable
publicstaticStringformat(Datedate){
if(date==null){
returnnull;
}
SimpleDateFormatformat=newSimpleDateFormat(FORMAT_TIME);
returnformat.format(date);
}
/**
*格式化日期字符串
*
*@paramdate
*日期
*@parampattern
*日期格式
*@return
*/
@Nullable
publicstaticStringformat(Datedate,Stringpattern){
if(date==null){
returnnull;
}
SimpleDateFormatformat=newSimpleDateFormat(pattern);
returnformat.format(date);
}
/**
*解析日期
*
*@paramdate
*日期字符串
*@parampattern
*日期格式
*@return
*/
@Nullable
publicstaticDateparse(Stringdate,Stringpattern){
if(date==null){
returnnull;
}
DateresultDate=null;
try{
resultDate=newSimpleDateFormat(pattern).parse(date);
}catch(ParseExceptione){
}
returnresultDate;
}
/**
*解析日期yyyy-MM-ddHH:mm:ss
*
*@paramdate
*日期字符串
*@return
*/
@Nullable
publicstaticDateparse(Stringdate){
if(date==null){
returnnull;
}
try{
returnnewSimpleDateFormat(FORMAT_TIME).parse(date);
}catch(ParseExceptione){
returnnull;
}
}
/**
*解析日期yyyy-MM-ddHH:mm:ss
*
*@paramtimestamp
*@return
*/
publicstaticStringformat(Longtimestamp,Stringpattern){
StringdateStr="";
if(null==timestamp||timestamp.longValue()<0){
returndateStr;
}
try{
Datedate=newDate(timestamp);
SimpleDateFormatformat=newSimpleDateFormat(pattern);
dateStr=format.format(date);
}catch(Exceptione){
//ignore
}
returndateStr;
}
/**
*解析日期yyyy-MM-ddHH:mm:ss
*
*@paramtimestamp
*@return
*/
publicstaticStringformat(Longtimestamp){
StringdateStr="";
if(null==timestamp||timestamp.longValue()<0){
returndateStr;
}
try{
Datedate=newDate(timestamp);
SimpleDateFormatformat=newSimpleDateFormat(FORMAT_TIME);
dateStr=format.format(date);
}catch(Exceptione){
//ignore
}
returndateStr;
}
/**
*获取当前时间前几天时间,按指定格式返回
*
*@paramdays
*@return
*/
publicstaticStringforwardDay(Integerdays,Stringformat){
DateTimedt=newDateTime();
DateTimey=dt.minusDays(days);
returny.toString(format);
}
/**
*获取当前时间前几天时间
*
*@paramdays
*@return
*/
publicstaticDateforwardDay(Integerdays){
DateTimedt=newDateTime();
DateTimey=dt.minusDays(days);
returny.toDate();
}
/**
*获取指定时间之后或者之前的某一天00:00:00默认返回当天
*
*@paramdays
*@return
*/
publicstaticDateday00(Integerdays,Stringdate,StringzimeZone)throwsThrowable{
DateTimedt;
TimeZonetimeZone;
try{
if(isBlank(zimeZone)){
timeZone=TimeZone.getDefault();
}else{
timeZone=TimeZone.getTimeZone(zimeZone);
}
if(isBlank(date)){
dt=newDateTime().withZone(DateTimeZone.forTimeZone(timeZone)).toLocalDateTime().toDateTime();
}else{
dt=newDateTime(date).withZone(DateTimeZone.forTimeZone(timeZone)).toLocalDateTime().toDateTime();
}
}catch(Exceptione){
thrownewThrowable(e);
}
DateTimey=dt.minusDays(days).withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0);
returny.toDate();
}
/**
*获取指定时间之后或者之前的某一天23:59:59默认返回当天
*
*@paramdays
*偏移量
*@return
*/
publicstaticDateday59(Integerdays,Stringdate,StringzimeZone)throwsThrowable{
DateTimedt;
TimeZonetimeZone;
try{
if(isBlank(zimeZone)){
timeZone=TimeZone.getDefault();
}else{
timeZone=TimeZone.getTimeZone(zimeZone);
}
if(isBlank(date)){
dt=newDateTime().withZone(DateTimeZone.forTimeZone(timeZone)).toLocalDateTime().toDateTime();
}else{
dt=newDateTime(date).withZone(DateTimeZone.forTimeZone(timeZone)).toLocalDateTime().toDateTime();
}
}catch(Exceptione){
thrownewThrowable(e);
}
DateTimey=dt.minusDays(days).withHourOfDay(23).withMinuteOfHour(59).withSecondOfMinute(59);
returny.toDate();
}
/**
*计算两个时间相差多少天
*
*@paramstartDate
*@paramendDate
*@return
*/
@Nullable
publicstaticIntegerdiffDay(DatestartDate,DateendDate){
if(startDate==null||endDate==null){
returnnull;
}
DateTimedt1=newDateTime(startDate);
DateTimedt2=newDateTime(endDate);
intday=Days.daysBetween(dt1,dt2).getDays();
returnMath.abs(day);
}
/**
*获取某月之前,之后某一个月最后一天,24:59:59
*
*@return
*/
publicstaticDatelastDay(Datedate,Integermonth){
DateTimedt1;
if(month==null){
month=0;
}
if(date==null){
dt1=newDateTime().minusMonths(month);
}else{
dt1=newDateTime(date).minusMonths(month);
}
DateTimelastDay=dt1.dayOfMonth().withMaximumValue().withHourOfDay(23).withMinuteOfHour(59)
.withSecondOfMinute(59);
returnlastDay.toDate();
}
/**
*获取某月月之前,之后某一个月第一天,00:00:00
*
*@return
*/
publicstaticDatefirstDay(Datedate,Integermonth){
DateTimedt1;
if(month==null){
month=0;
}
if(date==null){
dt1=newDateTime().minusMonths(month);
}else{
dt1=newDateTime(date).minusMonths(month);
}
DateTimelastDay=dt1.dayOfMonth().withMinimumValue().withHourOfDay(0).withMinuteOfHour(0)
.withSecondOfMinute(0);
returnlastDay.toDate();
}
publicstaticDateaddDay(Datedate,intoffset){
DateTimedt1;
if(date==null){
dt1=newDateTime().plusDays(offset);
returndt1.toDate();
}
dt1=newDateTime(date).plusDays(offset);
returndt1.toDate();
}
/**
*传入日期时间与当前系统日期时间的比较,若日期相同,则根据时分秒来返回,否则返回具体日期
*
*@return日期或者xx小时前||xx分钟前||xx秒前
*/
@Nullable
publicstaticStringgetNewUpdateDateString(Datenow,DatecreateDate){
if(now==null||createDate==null){
returnnull;
}
Longtime=(now.getTime()-createDate.getTime());
if(time>(24*60*60*1000)){
returntime/(24*60*60*1000)+"天前";
}elseif(time>(60*60*1000)){
returntime/(60*60*1000)+"小时前";
}elseif(time>(60*1000)){
returntime/(60*1000)+"分钟前";
}elseif(time>=1000){
returntime/1000+"秒前";
}
return"刚刚";
}
/**
*
*@Title:isBlank
*@Description:TODO(判断字符串是否为空或长度为0或由空格组成)
*@param@paramstr
*@param@return设定文件
*@returnboolean返回类型
*@throws
*/
publicstaticbooleanisBlank(Stringstr){
return(str==null||str.trim().length()==0);
}
publicstaticvoidmain(String[]args)throwsThrowable{
System.out.println(lastDay(newDate(),2));
System.out.println(firstDay(null,0));
TimeZonezone1=TimeZone.getTimeZone("GMT+8");
TimeZonezone2=TimeZone.getTimeZone("GMT-5");
System.out.println(format(newDate(),zone1,FORMAT_TIME));
System.out.println(format(newDate(),zone2,FORMAT_TIME));
System.out.println(format(day00(0,"2017-5-11","GMT+0")));
System.out.println(format(day00(0,"2017-5-11","GMT+8")));
System.out.println(format(day00(0,"2017-5-11","GMT-8")));
Datedate1=parse("2017-05-1117:53:52");
System.out.println(diffDay(date1,newDate()));
DateTimedateTime=newDateTime().withDayOfWeek(1);
DateTimedateTime1=newDateTime().withDayOfWeek(7).withTime(0,0,
0,0);
System.out.println(format(dateTime.toDate()));
System.out.println(format(dateTime1.toDate()));
System.out.println(format(newDate(),"MM/dd"));
}
}
优点
1.易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够直接进行访问域并且索引值1就是代表January。
2.易于扩展:JDK支持多日历系统是通过Calendar的子类来实现,这样就显示的非常笨重而且事实上要实现其它日历系统是很困难的。Joda-Time支持多日历系统是通过基于Chronology类的插件体系来实现。
3.提供一组完整的功能:它打算提供所有关系到date-time计算的功能.Joda-Time当前支持8种日历系统,而且在将来还会继续添加,有着比JDKCalendar更好的整体性能等等。
以上就是Java中joda日期格式化工具的使用示例的详细内容,更多关于java日期格式化工具的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。