java8 Date/Time API

Doto丶發表於2018-03-31

java8裡面新增了一套處理時間和日期的API,為什麼要搞一套全新的API呢,因為原來的java.util.Date以及Calendar實在是太難用了。
如果你有過在程式中處理時間的經驗你就會知道,在java8以前,處理時間是多麼讓人痛苦。

舉個簡單的小栗子:

如果你需要查詢當前周的訂單,那麼你需要先獲取本地時間,然後根據本地時間獲取一個Calendar,然後對Calendar進行一些時間上的加減操作,然後獲取Calendar中的時間。

而在java8中,你只需要這樣:

    LocalDate date = LocalDate.now();
    //當前時間減去今天是周幾
    LocalDate start = date.minusDays(date.getDayOfWeek().getValue());
    //當前時間加上(8-今天周幾)
    LocalDate end = date.plusDays(8 -date.getDayOfWeek().getValue());
複製程式碼

是不是很簡單呢,接下來就將看一下java8的時間api具體怎麼使用吧。

java8中提供裡真正的日期,時間分割開來的操作,LocalDate是日期相關操作,LocalTime是時間(即每天24個小時)的操作。
想要獲取時間及日期的話請使用LocalDateTime.

LocalDate

首先,獲取日期:
// 取當前日期:
LocalDate today = LocalDate.now(); // -> 2014-12-24
// 根據年月日取日期,12月就是12:
LocalDate crischristmas = LocalDate.of(2014, 12, 25); // -> 2014-12-25
// 根據字串取:
LocalDate endOfFeb = LocalDate.parse("2014-02-28"); // 嚴格按照ISO yyyy-MM-dd驗證,02寫成2都不行,當然也有一個過載方法允許自己定義格式
LocalDate.parse("2014-02-29"); // 無效日期無法通過:DateTimeParseException: Invalid date
複製程式碼

日期轉換:

// 取本月第1天:
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2014-12-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2014-12-02
// 取本月最後一天,再也不用計算是28,29,30還是31:
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2014-12-31
// 取下一天:
LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); // 變成了2015-01-01
// 取2015年1月第一個週一,這個計算用Calendar要死掉很多腦細胞:
LocalDate firstMondayOf2015 = LocalDate.parse("2015-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2015-01-05
複製程式碼

LocalTime

獲取時間:
//包含毫秒
LocalTime now = LocalTime.now(); // 11:09:09.240
//不包含毫秒  
LocalTime now = LocalTime.now().withNano(0)); // 11:09:09
//構造時間  
LocalTime zero = LocalTime.of(0, 0, 0); // 00:00:00
LocalTime mid = LocalTime.parse("12:00:00"); // 12:00:00
複製程式碼

LocalDateTime的很多操作都和LocalDate差不多,具體的請檢視一下原始碼就秒懂了。

####提醒一下朋友們:千萬不要覺得學習LocalDate及相關操作很麻煩,而繼續使用java.util.date,因為當你認真的看一下,你會發現用不了半個小時你就可以基本掌握LocalDate的使用。而這半個小時帶來的效率提升,程式碼質量的提升是很大的。

我就是很早就知道了LocalDate但是懶得學習,總覺得java.util.Date可以湊活使用及時他很渣,但是當我終於靜下心來學了一下之後,後悔莫及!!!!我為什麼沒有早點認真學習呢!我為什麼要使用愚蠢的java.util.Date那麼久呢!!!





ChangeLog

2018-03-31 完成

以上皆為個人所思所得,如有錯誤歡迎評論區指正。

歡迎轉載,煩請署名並保留原文連結。

聯絡郵箱:huyanshi2580@gmail.com

更多學習筆記見個人部落格------>呼延十

相關文章