我同時也發現,這三個類別沒有任何時區相關的訊息,但也不能說它們沒有處理時區,而只能說它們有選擇的隱藏了時區的處理。它們內部會使用作業系統目前的時區。
以此同時,Java 在 java.time
套件中也提供了幾個類別用於處理需要關注時區的日期時間 API。它們是 java.time.ZonedDateTime
和 java.time.ZoneId
。前者用於處理需要時區的日期時間,後者用於處理時區。
ZonedDateTime
和 LocalDateTime
類似,幾乎有相同的 API。從某些方面說,ZonedLocalTime
如果不傳遞時區訊息,那麼它會預設使用作業系統的時區,這樣,結果其實和 LocalDateTime
是類似的。
例如,我們可以使用ZonedDateTime
的now()
方法傳回目前時區( 作業系統時區) 的日期時間,呼叫parse()
方法可以將一個包含了時區資訊的字串格式的日期時間轉換為一個ZonedDateTime 實例。
import java.time.ZonedDateTime; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZonedDateTime now = ZonedDateTime.now(); System.out.println("当前日期时间是:" + now); ZonedDateTime datetime = ZonedDateTime.parse("2012-10-10T21:58:00+08:00"); System.out.println("日期时间是:" + datetime); } }
運行結果如下
#目前日期時間是:2018-10-08T22:21:56.806597 08:00[Asia/Shanghai]日期時間是:2012-10-10T21:58 08:00
我們也可以呼叫ZonedDateTime
物件的toLocalDate()
和toLocalTime ()
方法將取得該實例的轉換為本地的日期和時間
import java.time.LocalTime; import java.time.LocalDate; import java.time.ZonedDateTime; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZonedDateTime now = ZonedDateTime.now(); System.out.println("当前日期时间是:" + now); LocalDate date = now.toLocalDate(); System.out.println("本地日期是:" + now); LocalTime time = now.toLocalTime(); System.out.println("本地时间是:" + time); } }
運行結果如下
還回傳了時間?目前日期時間是:2022-10-08T22:28: 10.389487 08:00[Asia/Shanghai] 本地日期是:2022-10-08T22:28:10.389487 08:00[Asia/Shanghai] 本地時間是:22:28:10.389487##P#.回傳值好詭異,為啥
toLocalDate()
處理時區
例如可以呼叫
ZoneId
systemDefault() 傳回目前的時區。
import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZoneId currentZone = ZoneId.systemDefault(); System.out.println("当前时区是: " + currentZone); } }
運行結果如下
目前時區是: Asia/Shanghai
# 實例的我們也可以呼叫
ZonedDateTime
getZone() 方法取得實例所在的時區
import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZonedDateTime now = ZonedDateTime.now(); System.out.println("当前时区是: " + now.getZone()); } }
運行結果如下
目前時區是: Asia/Shanghai
以上是如何處理Java8中的時區日期和時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!