簡體   English   中英

從Instant和ZoneId組成ZonedDateTime時的預期行為是什么?

[英]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.

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