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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。