日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

localdatetime 默认时间_java中的时间与时区:LocalDateTime和Date

發(fā)布時(shí)間:2025/3/8 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 localdatetime 默认时间_java中的时间与时区:LocalDateTime和Date 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

LocalDateTime

LocalDateTime本身不包含時(shí)區(qū)信息,它存儲的是年、月、日、時(shí)分秒,納秒這樣的數(shù)字。

在不同的時(shí)區(qū)下,這樣的數(shù)字代表不同的時(shí)間。

比如一個(gè)LocalDateTime存儲2020-01-01 08:00:00,這里省略納秒。

對北京和東京的人來看這個(gè)時(shí)間,都認(rèn)為是本地時(shí)間的話,在真實(shí)時(shí)間上,因?yàn)闀r(shí)區(qū)的差異,其實(shí)是相差1個(gè)小時(shí)的時(shí)間的。

構(gòu)造函數(shù)

既然不帶時(shí)區(qū),那么考慮LocalDateTime的構(gòu)造函數(shù):

LocalDateTime dtUtc = LocalDateTime.now(ZoneOffset.UTC);

為什么這里又有時(shí)區(qū)了呢?其實(shí)這是一個(gè)方便的方法:

如果只是為了獲取當(dāng)前系統(tǒng)所在默認(rèn)時(shí)區(qū)的一個(gè)本地時(shí)間,那么用LocalDateTime.now()無參數(shù)構(gòu)造方法即可,而如果我想知道現(xiàn)在在UTC時(shí)區(qū)那里本地顯示的是什么時(shí)間,就可以用LocalDateTime.now(ZoneOffset.UTC)這個(gè)構(gòu)造方法了。

所以對于我們東八區(qū)來說:

//假如這個(gè)時(shí)間是:2020-01-01 10:00:00

LocalDateTime dtLocal = LocalDateTime.now();

//那么這個(gè)時(shí)間就會(huì)存儲:2020-01-01 02:00:00,提前8個(gè)小時(shí)

LocalDateTime dtUtc = LocalDateTime.now(ZoneOffset.UTC);

在構(gòu)造后,LocalDateTime同樣不攜帶時(shí)區(qū)信息,仍然只是表示一個(gè)顯示時(shí)間而已。

Date

Date存儲的是一個(gè)毫秒數(shù),準(zhǔn)確說是從1970-01-01 00:00:00到現(xiàn)在經(jīng)過的毫秒數(shù)。

而這個(gè)毫秒數(shù)是有時(shí)區(qū)的,它存儲的永遠(yuǎn)是現(xiàn)在針對UTC時(shí)區(qū)時(shí)的1970年零點(diǎn),經(jīng)過的毫秒數(shù)。怎么理解?

比如兩個(gè)程序員在同一時(shí)刻,一個(gè)在英國,一個(gè)在中國,同時(shí)調(diào)用new Date(),那么此時(shí)Date中存儲的毫秒數(shù)是完全相同的(當(dāng)然是理想情況的同時(shí),以及系統(tǒng)沒有誤差)。所不同的是在輸出時(shí),GMT0時(shí)區(qū),直接使用這個(gè)毫秒數(shù)計(jì)算得到顯示時(shí)間,而北京GMT+8顯示時(shí),會(huì)在這個(gè)時(shí)間上增加8小時(shí),即時(shí)區(qū)偏移。

所以如下兩個(gè)格式化類型,在當(dāng)前東八區(qū)的使用場景,輸出實(shí)際是一樣的:

SimpleDateFormat bjSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 北京

bjSdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 設(shè)置北京時(shí)區(qū)

SimpleDateFormat dftSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 不設(shè)置時(shí)區(qū)

構(gòu)造

因?yàn)镈ate有時(shí)區(qū)信息,所以構(gòu)造Date也就需要時(shí)區(qū)信息。

因此,不能直接從LocalDateTime轉(zhuǎn)換成Date,因?yàn)闊o法確定這個(gè)LodalDateTime究竟是哪個(gè)時(shí)區(qū)的這個(gè)時(shí)間。

而要借助Instant,因?yàn)镮nstant也代表從UTC開始的一個(gè)偏移時(shí)間。

LocalDateTime dt = LocalDateTime.now();

Date dt2 = Date.from(dt.toInstant(ZoneOffset.of("+8"))); //東八區(qū)

輸出

總結(jié)

以上是生活随笔為你收集整理的localdatetime 默认时间_java中的时间与时区:LocalDateTime和Date的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。