Java LocalDate 和 Epoch 之間的轉換
1. 概述
在本教程中,我們將演示從 Java 的LocalDate
到 Epoch的轉換Epoch
反之亦然。
2. Epoch 與 LocalDate
要進行轉換,了解Epoch
和LocalDate
背後的概念非常重要。 Java 中的“ Epoch
”指的是 1970-01-01T00:00:00Z 的時刻。 Epoch 之後的時刻將具有正值。類似地,紀元之前的任何時刻都將具有負值。
Epoch
、 LocalDate
和LocalDateTime
的所有實例都與時區相關,因此,當從一個實例轉換為另一個實例時,我們必須知道時區。在Java中,時區可以通過ZoneId
來表示 班級。 ZoneId 可以是通過方法ZoneId.systemDefault()
ZoneId
的系統時區.
或者,可以通過傳遞已知時區(例如歐洲/阿姆斯特丹)的String
來計算ZoneId
Europe/Amsterdam.
3.紀元到日期/時間
我們可以根據紀元以來的毫秒數計算LocalDate
或LocalDateTime
。或者,計數可以以秒**為單位,也可以以納秒為單位進行調整。此計數的 Java 數據類型**是Long
.
最後,我們還需要知道時區。讓我們看看如何進行轉換:
long milliSecondsSinceEpoch = 2131242L;
ZoneId zoneId = ZoneId.of("Europe/Amsterdam");
LocalDate date = Instant.ofEpochMilli(milliSecondsSinceEpoch).atZone(zoneId).toLocalDate();
在上面的代碼片段中,我們得到了阿姆斯特丹時區自Epoch
以來的毫秒數,因此我們可以使用Instant
類的ofEpochMilli()
方法來獲取LocalDate
值。否則,如果我們想要時間而不是日期,那麼我們會寫:
LocalDateTime time = Instant.ofEpochMilli(milliSecondsSinceEpoch).atZone(zoneId).toLocalDateTime();
在上面的代碼片段中,我們使用了相同的方法,但使用了toLocalDateTime
方法。
4. 日期/時間到紀元
如果我們有給定時區Epoch
LocalDate
日期,那麼我們可以在幾秒鐘內獲得紀元。讓我們看看如何:
ZoneId zoneId = ZoneId.of("Europe/Tallinn");
LocalDate date = LocalDate.now();
long EpochMilliSecondsAtDate = date.atStartOfDay(zoneId).toInstant().toEpochMilli();
在上面的示例中,我們獲取了今天日期的Epoch
秒數和系統當前所在的時區。請注意,我們只能獲取當天開始的Epoch
計數。這是因為LocalDate
沒有任何時間值信息。或者,如果我們確實有時間部分,我們就可以得到給定時刻的準確Epoch
計數:
LocalDateTime localDateTime = LocalDateTime.parse("2019-11-15T13:15:30");
long epochMilliSecondsAtTime = time.atZone(zoneId).toInstant().toEpochMilli();
5. 結論
在本文中,我們探討瞭如何從Epoch
轉換為LocalDate
和LocalDateTime
。我們還演示瞭如何將LocalDate or LocalDateTime
轉換為Epoch
。
與往常一樣,我們可以在 GitHub 上找到完整的代碼。