由於Jdk7及之前的日期時間類的不方便使用問題和線程安全問題等問題,2005年,Stephen Colebourne建立了Joda-Time庫,做爲替代的日期和時間API。Stephen向JCP提交了一個規範,他本人做爲規範的領導人,該規範就是JSR 310,在Java8中實現併發布。html
1.Java8日期、時間API包介紹
- java.time包:這是新的Java日期/時間API的基礎包,全部的主要基礎類都是這個包的一部分,如:LocalDate, LocalTime, LocalDateTime, Instant, Period, Duration等等。全部這些類都是不可變的和線程安全的,在絕大多數狀況下,這些類可以有效地處理一些公共的需求。
- java.time.chrono包:這個包爲非ISO的日曆系統定義了一些泛化的API,咱們能夠擴展AbstractChronology類來建立本身的日曆系統。
- java.time.format包:這個包包含可以格式化和解析日期時間對象的類,在絕大多數狀況下,咱們不該該直接使用它們,由於java.time包中相應的類已經提供了格式化和解析的方法。
- java.time.temporal包:這個包包含一些時態對象,咱們能夠用其找出關於日期/時間對象的某個特定日期或時間,好比說,能夠找到某月的第一天或最後一天。你能夠很是容易地認出這些方法,由於它們都具備「withXXX」的格式。
- java.time.zone包:這個包包含支持不一樣時區以及相關規則的類
2.Java8日期時間API主要類有:
LocalDate:表示不帶時間的日期
LocalTime:表示不帶日期的時間
LocalDateTime:日期和時間類
ZoneId:時區
ZonedDateTime:一個帶時區的完整時間
Instant:Unix 時間,它表明的是時間戳,好比 2018-01-14T02:20:13.592Z
Clock:獲取某個時區下當前的瞬時時間,日期或者時間
Duration:表示一個絕對的精確跨度,使用毫秒爲單位
Period:這個類表示與 Duration 相同的概念,可是以人們比較熟悉的單位表示,好比年、月、周
DateTimeFormatter:格式化輸出
TemporalAdjusters:得到指定日期時間等,如當月的第一天、今年的最後一天等java
ChronoUnit:時間單位枚舉,用於加減操做segmentfault
ChronoField:字段枚舉,用於設置字段值。安全
主要類圖:併發
時間範圍示意圖:url
參考:https://www.iteye.com/news/26064spa
https://segmentfault.com/a/1190000020179839.net
《Java8實戰》線程
https://blog.csdn.net/wangsun300/article/details/1034034903d