Java開源 - Joda-Time:讓日期處理更簡單

AntHutt 8年前發布 | 14K 次閱讀 Java 安卓開發 Java開發

簡介

Joda-Time,一個面向 Java 平臺的易于使用的開源時間/日期庫。

Joda-Time可以用來替換JDK的日期處理類,并且比 JDK中的時間類更加優秀。

使用

1、初始化

DateTime 類作為最重要和最核心的一個類,

Joda-Time 為它提供了豐富的初始化方式。

注意:DateTime 一旦創建,時間值將不能更改。所有時間更改的操作會重 新返回一個新的DateTime。

DateTime dateTime;dateTime = new DateTime(); //以當前系統的毫秒級時間構建實例
dateTime = new DateTime(1481006233254L); //以毫秒級時間參數構建實例
dateTime = new DateTime("2016-11-22"); // 以String為參數構造實例
dateTime = new DateTime(2016,12,1,11,22,59); // 以 年.月.日.時.分.秒 構造實例
dateTime = new DateTime(2016,12,1,11,22,59,114); // 以 年.月.日.時.分.秒.毫秒 構造實例
dateTime = new DateTime(new Date()); // 以 JDK中Date為參數構造實例
dateTime = new DateTime(Calendar.getInstance()); // 以 JDK中Calendar為參數構造實例
dateTime = new DateTime(new DateTime()); // 以 DateTime本身為參數構造實例

// 注意:以上的每種實例化方式都可以在最后加上DateTimeZone參數來指定時區。 // 或者加上Chronology參數指定年表。 // 兩個參數都不傳或者傳null,使用默認值

DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss"); // 通過DateTime的parse方法解析時間 DateTime dateTime = DateTime.parse("2016-12-1 14:22:45", format);</code></pre>

2、格式化輸出

比較復雜的寫法是通過DateTimeFormatter 來格式化:

DateTime dateTime = new DateTime();
// 使用DateTimeFormatter 格式化日期
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd");
// DateTimeFormatter 作為參數傳到toString方法中
String time = dateTime.toString(fmt);
// --> 輸出: 2016-12-06

更加簡便的方式:

// 更簡單的方法
DateTime dateTime = new DateTime();
// toString方法有一個String類型參數的重載
String time = dateTime.toString("yyyy-MM-dd");
// --> 輸出: 2016-12-06

// 既然如此,我們可以更方便輸出更多格式 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");</code></pre>

3、日期的比較

DateTime dateTime = new DateTime("2014-11-22");
DateTime dateTime2 = new DateTime("2014-11-22");
DateTime dateTime3 = new DateTime("2015-12-25");
dateTime.isEqual(dateTime2); // true
dateTime.isBefore(dateTime3); // true

比較的方法有 isEqual isBefore isAfter

每個方法對應三種重載,同時還有和當前時間比較的方法:

比較時間的方法

4、日期的操作

  • 設置日期

    設置日期的方法都是以with開頭

    // 初始化一個DateTime 
    DateTime dateTime = new DateTime("2016-3-31");
    dateTime.toString("yyyy-MM-dd hh:mm:ss");//2016-03-31 12:00:00
    //將 年 設置為2014。
    //前面說過,所有更改時間的操作都會返回新的DateTime
    //舊的DateTime 日期值不會改變
    DateTime dateTime1 = dateTime.withYear(2014);
    dateTime1.toString("yyyy-MM-dd hh:mm:ss");//2014-03-31 12:00:00

    設置時間屬性的方法比較多,可以設置年月日、時分秒、時區等等。

    基本都是以with開頭,比較直觀。

     

  • 增加日期

    增加日期的方法都是以plus 開頭

    DateTime dateTime = new DateTime();
    dateTime.toString("yyyy-MM-dd hh:mm:ss"); // 2016-12-06 03:15:07
    // 當前時間基礎上加上兩天
    DateTime dateTime2 = dateTime.plusDays(2);
    dateTime2.toString("yyyy-MM-dd hh:mm:ss"); // 2016-12-08 03:15:07

    增加日期的方法還有不少,也比較直觀:

增加日期的方法

  • 減少日期

    減少日期的方法都是以minus開頭

    DateTime dateTime = new DateTime();
    dateTime.toString("yyyy-MM-dd hh:mm:ss"); //2016-12-06 03:20:45
    // 減少五個月,并返回一個新的DateTime 
    DateTime dateTime2 = dateTime.minusMonths(5);
    dateTime2.toString("yyyy-MM-dd hh:mm:ss"); //2016-07-06 03:20:45

    更多減少日期方法:

減少日期方法

5、獲取日期屬性

  • get方法獲取

    通過get開頭的方法,可以獲取一些常用的屬性

DateTime dateTime = new DateTime("2016-3-31");
int dayOfWeek = dateTime.getDayOfWeek();
Log.i("tag", "3月31是星期:"+dayOfWeek);
// -->3月31是星期:4

更多get方法:

獲取日期屬性

  • 使用Property獲取日期屬性

    Property是DateTime中的屬性,使用Property可以做一些get方法無法進行的操作。

DateTime dateTime = new DateTime("2016-3-31");
dateTime.dayOfWeek().getAsShortText(Locale.ENGLISH); //Thu
dateTime.dayOfWeek().getAsShortText(Locale.CHINA); //周四
dateTime.dayOfWeek().getAsText(Locale.KOREAN); // ??? (韓語:星期四)
dateTime.dayOfWeek().getAsText(Locale.CHINA); //星期四

// getAsShortText:獲取縮略的文本 // getAsText : 獲取完整的文本</code></pre>

問題:如果我們將 3月31日 減少 1 個月,這個輸出的結果會是什么呢?

結果不可能是2月31日的 , 因為2月不存在31日。

我們運行程序看看結果:

DateTime dateTime = new DateTime("2016-3-31");
Log.i("tag", dateTime.toString("yyyy-MM-dd hh:mm:ss"));
DateTime dateTime1 = dateTime.minusMonths(1);
Log.i("tag", dateTime1.toString("yyyy-MM-dd hh:mm:ss"));

輸出結果

從圖中可以看出DateTime 對這種情況是做了很好處理。

 

 

 本文由用戶 AntHutt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!