1. 程式人生 > >Joda Time 使用

Joda Time 使用

http max mmm eee 但是 with ring mea ica


layout: default
title: Joda Time 使用
category: [工具, Java]
comments: true
---

Joda Time 使用

對於系統的一些時間操作很是不方便,為了方便轉化,有時候用date,有時候用timestmp,有時候用calendar,忍不住想更改了.
但是任務巨大,先把筆記收藏了,後面有機會再更改了.下面只是幾個使用的例子.

1、 獲取今天的開始時間:比如:2014-06-19 00:00:00

        //joda
        DateTime nowTime = new DateTime();
        DateTime startOfDay =  nowTime.withTimeAtStartOfDay();
        
        //jdk
        Calendar c1 = Calendar.getInstance();
        c1.setTimeInMillis(timeInMs);
        c1.set(Calendar.HOUR_OF_DAY, 0);
        c1.set(Calendar.MINUTE, 0);
        c1.set(Calendar.SECOND, 0);
        c1.set(Calendar.MILLISECOND, 0);
        return c1.getTimeInMillis();
        

2、 獲取今天的結束時間:比如:2014-06-19 23:59:59

        //joda
        DateTime nowTime = new DateTime();
        DateTime endOfDay =  nowTime.millisOfDay().withMaximumValue();
        
        //jdk
        Calendar c1 = Calendar.getInstance();
        c1.setTimeInMillis(timeInMs);
        c1.set(Calendar.HOUR_OF_DAY, 23);
        c1.set(Calendar.MINUTE, 59);
        c1.set(Calendar.SECOND, 59);
        c1.set(Calendar.MILLISECOND, 0);
        return c1.getTimeInMillis();

3、 獲取現在距離今天結束還有多長時間

        //joda
        DateTimenowTime = new DateTime();
        DateTime endOfDay = nowTime.millisOfDay().withMaximumValue();
        endOfDay.getMillis()-nowTime.getMillis()

4、 計算兩個日期的相隔天數

  • JodaTime
        //joda
        DateTime nowTime = new DateTime();
        DateTime futureTime = new DateTime(2015, 10, 1, 0, 0, 0);
        Int days = Days.daysBetween(nowTime, futureTime).getDays();
        
        //jdk
        public static int getBetweenDay(long startTime, long endTime) {
            Calendar start = Calendar.getInstance();
            start.setTimeInMillis(startTime);
            Calendar end = Calendar.getInstance();
            end.setTimeInMillis(endTime);
            return (int) ((end.getTimeInMillis() - start.getTimeInMillis()) / 86400000);
        }

5、 創建任意時間對象

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

6、 與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); 

7、 加上90天後輸出

        //joda
        DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);
        System.out.println(dateTime.plusDays(90).toString("E MM/dd/yyyy HH:mm:ss.SSS");

        jdk
        Calendar calendar = Calendar.getInstance();
        calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
        SimpleDateFormat sdf =
          new SimpleDateFormat("E MM/dd/yyyy HH:mm:ss.SSS");
        calendar.add(Calendar.DAY_OF_MONTH, 90);
        System.out.println(sdf.format(calendar.getTime()));

8、 時間的輸出顯示

        //通過標準的 ISO-8601輸出
        DateTime dateTime = SystemFactory.getClock().getDateTime();
        dateTime.toString(ISODateTimeFormat.basicDateTime());
        dateTime.toString(ISODateTimeFormat.basicDateTimeNoMillis());
        dateTime.toString(ISODateTimeFormat.basicOrdinalDateTime());
        dateTime.toString(ISODateTimeFormat.basicWeekDateTime());

        //傳遞 SimpleDateFormat字符串輸出
        DateTime dateTime = SystemFactory.getClock().getDateTime();
        dateTime.toString("MM/dd/yyyy hh:mm:ss.SSSa");
        dateTime.toString("dd-MM-yyyy HH:mm:ss");
        dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");
        dateTime.toString("MM/dd/yyyy HH:mm ZZZZ");
        dateTime.toString("MM/dd/yyyy HH:mm Z");

        //輸出的結果如下:
        20090906T080000.000-0500
        20090906T080000-0500
        2009249T080000.000-0500
        2009W367T080000.000-0500

        09/06/2009 02:30:00.000PM
        06-Sep-2009 14:30:00
        Sunday 06 September, 2009 14:30:00PM
        09/06/2009 14:30 America/Chicago
        09/06/2009 14:30 -0500

參考的博客

Joda Time 使用 - CSDN博客
http://blog.csdn.net/zeus_9i/article/details/32318771

Overview (Joda-Time 2.9.9 API)
http://www.joda.org/joda-time/apidocs/

強大易用的日期和時間庫 Joda Time - 堅持而不浮躁 - ITeye博客
http://persevere.iteye.com/blog/1755237

Joda-Time 簡介
https://www.ibm.com/developerworks/cn/java/j-jodatime.html

Releases · JodaOrg/joda-time(github架包和源碼地址)
https://github.com/JodaOrg/joda-time/releases

Joda Time 使用