簡體   English   中英

如何在Java 8中正確使用ZoneOffset,ZoneId和LocalDateTime?

[英]How to use ZoneOffset, ZoneId with LocalDateTime properly in Java 8?

這里的目標是將LocalDateTime轉換為epoch秒來回。

假設我將LocalDateTime定義為:

LocalDateTime now = LocalDateTime.now();

我想將它轉換為時間亞洲/加爾各答時區的第二紀元,我可以這樣做:

long epochSecondNow = now.atZone(ZoneId.of("Asia/Kolkata")).toEpochSecond();

現在,我想從epochSecondNow再次生成'now':

LocalDateTime類有一個方法' ofEpochSecond(long epochSecond,long nanoOfSecond, ZoneOffset zoneOffset) ',它將epoch second,nano of second和ZoneOffset作為參數。

我無法使用“Asia / Kolkata”創建ZoneOffset。 我應該如何為我的區域創建ZoneOffset對象以便使用'ofEpochSecond'方法。 還有其他方法嗎?

謝謝!

嘗試使用Instant.ofEpochSecond

Instant instant = Instant.ofEpochSecond(epochSecondNow);
ZonedDateTime atZone = instant.atZone(ZoneId.of("Asia/Kolkata"));
LocalDateTime localDateTime = atZone.toLocalDateTime();

如果要使用系統時區,可以使用ZoneId.systemDefault()

好吧,我只是按照以下方式執行此操作,方法是通過將偏移值作為String傳遞來獲取ZoneOffset:

LocalDateTime nowFromEpochSecond = LocalDateTime.ofEpochSecond(epochSecondNow,0,ZoneOffset.of("+05:30"));

我希望有一種更簡潔的方法,而不是硬編碼偏移和區域ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM