java8 新特性之日期時間 API
概念性東西:
java 8透過釋出新的Date-Time API (JSR 310)來進一步加強對日期與時間的處理。
在舊版的 Java 中,日期時間 API 存在諸多問題,其中有:
-
非執行緒安全 − java.util.Date 是非執行緒安全的,所有的日期類都是可變的,這是Java日期類最大的問題之一。
-
設計很差 − Java的日期/時間類的定義並不一致,在java.util和java.sql的包中都有日期類,此外用於格式化和解析的類在java.text包中定義。java.util.Date同時包含日期和時間,而java.sql.Date僅包含日期,將其納入java.sql包並不合理。另外這兩個類都有相同的名字,這本身就是一個非常糟糕的設計。
-
時區處理麻煩 − 日期類並不提供國際化,沒有時區支援,因此Java引入了java.util.Calendar和java.util.TimeZone類,但他們同樣存在上述所有的問題。
Java 8 在 java.time 包下提供了很多新的 API。以下為兩個比較重要的 API:
-
Local(本地) − 簡化了日期時間的處理,沒有時區的問題。
-
Zoned(時區) − 透過制定的時區處理日期時間。
新的java.time包涵蓋了所有處理日期,時間,日期/時間,時區,時刻(instants),過程(during)與時鐘(clock)的操作。
程式碼示例
package cn.wh.java8.chapter.one;import java.time.*;import java.time.format.DateTimeFormatter;public class DateTimeTest { public static void main(String[] args) { DateTimeTest d = new DateTimeTest();// d.testLocalDateTime(); System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");// d.testZonedDateTime(); d.testZonedDateTime2(); } // 本地時間 public void testLocalDateTime(){ // 獲取當前的日期時間 LocalDateTime currentTime = LocalDateTime.now(); System.out.println("當前時間: " + currentTime); LocalDate date1 = currentTime.toLocalDate(); System.out.println("date1: " + date1); Month month = currentTime.getMonth(); int day = currentTime.getDayOfMonth(); int seconds = currentTime.getSecond(); System.out.println("月: " + month +", 日: " + day +", 秒: " + seconds); LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012); System.out.println("date2: " + date2); // 12 december 2014 LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12); System.out.println("date3: " + date3); // 22 小時 15 分鐘 LocalTime date4 = LocalTime.of(22, 15); System.out.println("date4: " + date4); // 解析字串 LocalTime date5 = LocalTime.parse("20:15:30"); System.out.println("date5: " + date5); } // 時區測試 public void testZonedDateTime(){ // 獲取當前時間日期 ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]"); System.out.println("date1: " + date1); ZoneId id = ZoneId.of("Europe/Paris"); System.out.println("ZoneId: " + id); ZoneId currentZone = ZoneId.systemDefault(); System.out.println("當期時區: " + currentZone); } // 時區測試 public void testZonedDateTime2(){ // 獲取當前時區時間 ZonedDateTime date1 = ZonedDateTime.now(); System.out.println("date1: " + date1); // 獲取系統預設時區時間 ZonedDateTime date2 = date1.withZoneSameInstant(ZoneId.systemDefault()); System.out.println("date1: " + date2); // 格式化時間 DateTimeFormatter formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME; System.out.println(formatter.format(date2)); // 自定義時間格式 DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println(formatter2.format(date2)); } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992808/viewspace-2750559/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java8新特性之日期-時間APIJavaAPI
- Java8新特性之時間APIJavaAPI
- Java8新特性探索之新日期時間庫Java
- java8 – 新的時間日期API示例JavaAPI
- 【Java8新特性】關於Java8中的日期時間API,你需要掌握這些!!JavaAPI
- Java8新特性--Stream APIJavaAPI
- 《Java8實戰》-第十二章筆記(新的日期和時間API)Java筆記API
- 【JAVA8新的時間與日期 API】- 傳統時間格式化的執行緒安全問題JavaAPI執行緒
- JDK1.8-新的日期和時間APIJDKAPI
- Java8新特性之:OptionalJava
- Java日期時間操作基礎——包含JDK1.8時間操作新特性JavaJDK
- ?Java8新特性之Optional類Java
- java8 新特性之方法引用Java
- java8 新特性之Optional 類Java
- 《Java 8 in Action》Chapter 12:新的日期和時間APIJavaAPTAPI
- Java 中的時間日期 APIJavaAPI
- Java 8 的時間日期 APIJavaAPI
- Java8新特性探索之Stream介面Java
- java8 新特性之Lambda 表示式Java
- java8 新特性之預設方法Java
- Java 8 日期和時間的APIJavaAPI
- JAVA8新特性Java
- Java8 新特性Java
- java8 新特性之函式式介面Java函式
- 13. 尚矽谷_Java8新特性_Stream API 練習JavaAPI
- 【新特性速遞】最佳化日期選擇器的時間皮膚
- Java 日期和時間 API:實用技巧與示例 - 輕鬆處理日期和時間JavaAPI
- Java8新特性探索之函式式介面Java函式
- Java8新特性 - LambdaJava
- Java8的新特性Java
- JAVA8新特性用法Java
- 【Java8新特性】Stream API有哪些中間操作?看完你也可以吊打面試官!!JavaAPI面試
- Joda Time專案和java8時間apiJavaAPI
- JDK 9新特性之Flow API 初探JDKAPI
- Java8新特性實踐Java
- java8新特性stream流Java
- Java8 新特性詳解Java
- Java8新特性系列-LambdaJava