深入了解Java8中的時區(qū)日期時間
上一章節(jié) Java 8 新日期時間 API ( 上 ) – 本地日期時間 我們對 Java 8 重新設(shè)計的日期時間 API 做了一些基礎(chǔ)的介紹,同時詳細(xì)介紹了和本地時間有關(guān)的幾個類 LocalDateTime
、LocalDate
和 LocalTime
。
我同時也發(fā)現(xiàn),這三個類沒有任何時區(qū)相關(guān)的信息,但也不能說它們沒處理時區(qū),而只能說它們有選擇的隱藏了時區(qū)的處理。它們內(nèi)部會使用操作系統(tǒng)當(dāng)前的時區(qū)。
以此同時,Java 在 java.time
包中也提供了幾個類用于處理需要關(guān)注時區(qū)的日期時間 API。它們是 java.time.ZonedDateTime
和 java.time.ZoneId
。前者用于處理需要時區(qū)的日期時間,后者用于處理時區(qū)。
ZonedDateTime
和 LocalDateTime
類似,幾乎有著相同的 API。從某些方面說,ZonedLocalTime
如果不傳遞時區(qū)信息,那么它會默認(rèn)使用操作系統(tǒng)的時區(qū),這樣,結(jié)果其實和 LocalDateTime
是類似的。
比如,我們可以使用 ZonedDateTime
的 now()
方法返回當(dāng)前時區(qū) ( 操作系統(tǒng)時區(qū) ) 的日期時間,調(diào)用 parse()
方法可以將一個包含了時區(qū)信息的字符串格式的日期時間轉(zhuǎn)化為一個 ZonedDateTime 實例。
Java8Tester.java
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("當(dāng)前日期時間是:" + now); ZonedDateTime datetime = ZonedDateTime.parse("2012-10-10T21:58:00+08:00"); System.out.println("日期時間是:" + datetime); } }
運(yùn)行結(jié)果如下
當(dāng)前日期時間是:2018-10-08T22:21:56.806597+08:00[Asia/Shanghai] 日期時間是:2012-10-10T21:58+08:00
我們還可以調(diào)用 ZonedDateTime
對象的 toLocalDate()
和 toLocalTime()
方法將獲取該實例的轉(zhuǎn)換為本地的日期和時間
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("當(dāng)前日期時間是:" + now); LocalDate date = now.toLocalDate(); System.out.println("本地日期是:" + now); LocalTime time = now.toLocalTime(); System.out.println("本地時間是:" + time); } }
運(yùn)行結(jié)果如下
當(dāng)前日期時間是: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.S 這個返回值好詭異,為啥 toLocalDate()
還返回了時間?
處理時區(qū)
時區(qū)相關(guān)的信息,我們可以使用 ZoneId
類來處理。
比如可以調(diào)用 ZoneId
類的靜態(tài)方法 systemDefault()
返回當(dāng)前的時區(qū)。
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("當(dāng)前時區(qū)是: " + currentZone); } }
運(yùn)行結(jié)果如下
當(dāng)前時區(qū)是: Asia/Shanghai
我們還可以調(diào)用 ZonedDateTime
實例的 getZone()
方法獲取實例所在的時區(qū)
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("當(dāng)前時區(qū)是: " + now.getZone()); } }
運(yùn)行結(jié)果如下
當(dāng)前時區(qū)是: Asia/Shanghai
到此這篇關(guān)于深入了解Java8中的時區(qū)日期時間的文章就介紹到這了,更多相關(guān)Java8時區(qū)日期時間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
@Bean注解和@Configuration、@Component注解組合使用的區(qū)別
這篇文章主要介紹了@Bean注解和@Configuration、@Component注解組合使用的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Spring 使用JavaConfig實現(xiàn)配置的方法步驟
這篇文章主要介紹了Spring 使用JavaConfig實現(xiàn)配置的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01