Java 教程
Java 8通過發(fā)布新的Date-Time API (JSR 310)來進(jìn)一步加強對日期與時間的處理。
在舊版的 Java 中,日期時間 API 存在諸多問題,其中有:
非線程安全 ? java.util.Date 是非線程安全的,所有的日期類都是可變的,這是Java日期類最大的問題之一。
設(shè)計很差 ? Java的日期/時間類的定義并不一致,在java.util和java.sql的包中都有日期類,此外用于格式化和解析的類在java.text包中定義。java.util.Date同時包含日期和時間,而java.sql.Date僅包含日期,將其納入java.sql包并不合理。另外這兩個類都有相同的名字,這本身就是一個非常糟糕的設(shè)計。
時區(qū)處理麻煩 ? 日期類并不提供國際化,沒有時區(qū)支持,因此Java引入了java.util.Calendar和java.util.TimeZone類,但他們同樣存在上述所有的問題。
Java 8 在 java.time 包下提供了很多新的 API。以下為兩個比較重要的 API:
Local(本地) ? 簡化了日期時間的處理,沒有時區(qū)的問題。
Zoned(時區(qū)) ? 通過制定的時區(qū)處理日期時間。
新的java.time包涵蓋了所有處理日期,時間,日期/時間,時區(qū),時刻(instants),過程(during)與時鐘(clock)的操作。
LocalDate/LocalTime 和 LocalDateTime 類可以在處理時區(qū)不是必須的情況。代碼如下:
執(zhí)行以上腳本,輸出結(jié)果為:
$ javac Java8Tester.java $ java Java8Tester 當(dāng)前時間: 2016-04-15T16:55:48.668 date1: 2016-04-15 月: APRIL, 日: 15, 秒: 48 date2: 2012-04-10T16:55:48.668 date3: 2014-12-12 date4: 22:15 date5: 20:15:30
如果我們需要考慮到時區(qū),就可以使用時區(qū)的日期時間API:
執(zhí)行以上腳本,輸出結(jié)果為:
$ javac Java8Tester.java $ java Java8Tester date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai] ZoneId: Europe/Paris 當(dāng)期時區(qū): Asia/Shanghai