![](/img/trans.png)
[英]How to get ZoneId, LocalDateTime and Instant from TemporalAccessor
[英]What is the expected behavior when forming ZonedDateTime from Instant and ZoneId?
給定一個由時間戳記組成的Instant(例如“ 2016-06-07 08-01-55”)和特定的ZoneId(“ Europe / Berlin”),此代碼的預期結果是什么?
ZonedDateTime.ofInstant(timestamp.toInstant, zoneId)
可不可能是
'2016-06-07 08-01-55 +02:00'(時間未更改,但ZoneId已更改)
要么
'2016-06-07 10-01-55 +02:00'(時間和ZoneId已更改)
我問這個問題是因為我在不同的環境中看到兩種行為。
時刻總是從1970-01-01T00:00:00Z開始計數。 因此,從瞬間創建ZonedDateTime會將即時時間戳轉換為相應的區域。
在您的示例中,輸入的時間戳似乎不包含區域信息。 最有可能的是,當將其解析為一個瞬間時,它將產生不同的結果,因為大多數解析器將假定時間戳位於系統默認區域中。 這可能會導致基於運行該系統的系統出現不同的瞬間,進而導致您觀察到的不同行為。
假設您正確設置了每個參數,則輸出是確定性的。 使用數據:
LocalDateTime datetime = LocalDateTime.of(2016, 6, 7, 8, 1, 55);
ZonedDateTime zdt = datetime.atZone(ZoneId.of("Europe/Berlin"));
Instant instant = zdt.toInstant();
Timestamp ts = Timestamp.from(instant); //The timestamp you describe in your question
ZonedDateTime result = ZonedDateTime.ofInstant(ts.toInstant(), ZoneId.of("Europe/Berlin"));
System.out.println(result); //WILL ALWAYS PRINTS: 2016-06-07T08:01:55+02:00[Europe/Berlin]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.