具體開發(fā)中涉及日期操作的非常多,常見(jiàn)的場(chǎng)景主要有以下幾個(gè):
- 當(dāng)前日期轉(zhuǎn)為字符串
- 指定字符串轉(zhuǎn)為日期
- 取得兩個(gè)日期之間的天數(shù)間隔
- 取得兩個(gè)日期之間的月份間隔
- 當(dāng)前日期增加多少天變?yōu)槟膫€(gè)日期
- 當(dāng)前日期增加多少月變?yōu)槟膫€(gè)日期
- ......
Joda-Time提供了一組Java類包用于處理包括ISO8601標(biāo)準(zhǔn)在內(nèi)的date和time。可以利用它把JDK Date和Calendar類完全替換掉,而且仍然能夠提供很好的集成徐伐。
Joda-Time主要的特點(diǎn)包括:
易于使用:Calendar讓獲取"正常的"的日期變得很困難,使它沒(méi)辦法提供簡(jiǎn)單的方法,而Joda-Time能夠 直接進(jìn)行訪問(wèn)域并且索引值1就是代表January瞧毙。
易于擴(kuò)展:JDK支持多日歷系統(tǒng)是通過(guò)Calendar的子類來(lái)實(shí)現(xiàn),這樣就顯示的非常笨重而且事實(shí) 上要實(shí)現(xiàn)其它日歷系統(tǒng)是很困難的。Joda-Time支持多日歷系統(tǒng)是通過(guò)基于Chronology類的插件體系來(lái)實(shí)現(xiàn)宙彪。
提供一組完整的功能:它打算提供 所有關(guān)系到date-time計(jì)算的功能.Joda-Time當(dāng)前支持8種日歷系統(tǒng)矩动,而且在將來(lái)還會(huì)繼續(xù)添加,有著比JDK Calendar更好的整體性能等等释漆。
pom.xml引入:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
下面是幾個(gè)常見(jiàn)例子:
代碼參見(jiàn)com.critc.JodaDateUtilTest
:
public static void main(String[] args) {
//日期格式化
DateTime dateTime = new DateTime(2012, 12, 13, 16, 30);
System.out.println("當(dāng)前日期格式化:" + dateTime.toString("yyyyMMdd HHmmss"));
DateTimeFormatter format = DateTimeFormat.forPattern("yyyyMMddHHmmss");
DateTime d2 = DateTime.parse("20170402120023", format);
System.out.println("字符串格式化成日期:" + d2);
//兩個(gè)日期間隔多少天
LocalDate start = new LocalDate(2012, 12, 14);
LocalDate end = new LocalDate(2013, 01, 15);
int days = Days.daysBetween(start, end).getDays();
System.out.println("兩個(gè)日期間隔天數(shù):" + days);
int months = Months.monthsBetween(start, end).getMonths();
System.out.println("兩個(gè)日期間隔月數(shù):" + months);
//當(dāng)前天增加多少天
dateTime = dateTime.plusDays(31);
System.out.println("當(dāng)前日期增加多少天變?yōu)椋? + dateTime);
dateTime = dateTime.plusMonths(2);
System.out.println("當(dāng)前日期增加多少月變?yōu)椋? + dateTime);
}
開發(fā)建議
實(shí)際開發(fā)中一定要將涉及日期處理的方法單獨(dú)拿出來(lái)悲没,統(tǒng)一格式,統(tǒng)一類中進(jìn)行處理男图,萬(wàn)不可單獨(dú)處理示姿。