1. 程式人生 > >強大易用的日期和時間庫 Joda Time

強大易用的日期和時間庫 Joda Time

ber HR add 計算 con 正常 second 關系 易用

Joda-Time提供了一組Java類包用於處理包括ISO8601標準在內的date和time。可以利用它把JDK Date和Calendar類完全替換掉,而且仍然能夠提供很好的集成,並且它是線程安全的。

Joda-Time主要的特點包括:

1. 易於使用:Calendar讓獲取"正常的"的日期變得很困難,使它沒辦法提供簡單的方法,而Joda-Time能夠 直接進行訪問域並且索引值1就是代表January。

2. 易於擴展:JDK支持多日歷系統是通過Calendar的子類來實現,這樣就顯示的非常笨重而且事實 上要實現其它日歷系統是很困難的。Joda-Time支持多日歷系統是通過基於Chronology類的插件體系來實現。

3. 提供一組完整的功能:它打算提供 所有關系到date-time計算的功能.Joda-Time當前支持8種日歷系統,而且在將來還會繼續添加,有著比JDK Calendar更好的整體性能等等。

pom引入依賴包

1 <dependency>
2       <groupId>joda-time</groupId>
3       <artifactId>joda-time</artifactId>
4       <version>2.6</version>
5 </dependency>

示例

1、創建任意時間對象

//jdk  
Calendar calendar=Calendar.getInstance();  
calendar.set(2012, Calendar.NOVEMBER, 15, 18, 23,55);  
  
//Joda-time  
DateTime dateTime=new DateTime(2012, 12, 15, 18, 23,55);  

2、計算兩日期相差的天數

//jdk  
Calendar start = Calendar.getInstance();   
start.set(2012, Calendar.NOVEMBER, 14);  
  
Calendar end 
= Calendar.getInstance(); end.set(2012, Calendar.NOVEMBER, 15); long startTim = start.getTimeInMillis(); long endTim = end.getTimeInMillis(); long diff = endTim-startTim; int days=(int) (diff/1000 / 3600 / 24); //joda-time LocalDate start=new LocalDate(2012, 12,14); LocalDate end=new LocalDate(2012, 12, 15); int days = Days.daysBetween(start, end).getDays();

3、獲取18天之後的某天在下個月的當前周的第一天日期

    //jdk  
Calendar current = Calendar.getInstance();  
current.add(Calendar.DAY_OF_MONTH, 18);  
current.add(Calendar.MONTH, 1);  
     ......  
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
Date date = current.getTime();  
String dateStr = dateFormat.format(date);  
System.out.println(dateStr);  
  
//joda-time  
String dateStr = new DateTime().plusDays(18).plusMonths(1)  
    .dayOfWeek().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss");  
System.out.println(dateStr);  

4、時間格式化

DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");  
  
        //時間解析  
        DateTime dateTime = DateTime.parse("2012-12-21 23:22:45", format);  
          
        //時間格式化,輸出==> 2012/12/21 23:22:45 Fri  
        String string_u = dateTime.toString("yyyy/MM/dd HH:mm:ss EE");  
        System.out.println(string_u);  
          
        //格式化帶Locale,輸出==> 2012年12月21日 23:22:45 星期五  
        String string_c = dateTime.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE);  
        System.out.println(string_c);  

5、與JDK互操作

 //通過jdk時間對象構造  
Date date = new Date();  
DateTime dateTime = new DateTime(date);  
  
Calendar calendar = Calendar.getInstance();  
dateTime = new DateTime(calendar);  
  
// Joda-time 各種操作.....  
dateTime = dateTime.plusDays(1) // 增加天  
                    .plusYears(1)// 增加年  
                    .plusMonths(1)// 增加月  
                    .plusWeeks(1)// 增加星期  
                    .minusMillis(1)// 減分鐘  
                    .minusHours(1)// 減小時  
                    .minusSeconds(1);// 減秒數  
                      
// 計算完轉換成jdk 對象  
Date date2 = dateTime.toDate();  
Calendar calendar2 = dateTime.toCalendar(Locale.CHINA); 

強大易用的日期和時間庫 Joda Time