2016-09-15 209 views

回答

60

答案來自javadoc of ZoneId ...

一個是了zoneid用於識別用於將 即時和LocalDateTime之間進行轉換的規則。有兩種不同類型的ID:

  • 固定偏移 - 完全解析從UTC /格林威治,使用所有本地日期時間
  • 地理區域相同的偏移偏移 - 一個區域,其中一組特定的從UTC /格林威治發現偏移的規則適用

大多數固定偏移由ZoneOffset表示。 在任何ZoneId上調用標準化() 將確保將固定偏移ID作爲ZoneOffset表示爲 。

...,然後從javadoc of ZoneId#of

這種方法解析產生了zoneid或ZoneOffset的ID。 A 如果ID是'Z',或者以'+'或' - '開始,則返回ZoneOffset。

參量ID被指定爲"UTC",因此它會返回與一個ZoneId偏移量,這在字符串形式還提出:

System.out.println(now.withZoneSameInstant(ZoneOffset.UTC)); 
System.out.println(now.withZoneSameInstant(ZoneId.of("UTC"))); 

輸出:

2017-03-10T08:06:28.045Z 
2017-03-10T08:06:28.045Z[UTC] 

當您使用equals方法進行比較時,您可以檢查對象等值。由於所述差異,評估結果爲false

當使用normalized()方法如文檔中提出的,使用equals比較將返回true,如normalized()將返回對應ZoneOffset

標準化該時區ID,返回一個ZoneOffset儘可能。

now.withZoneSameInstant(ZoneOffset.UTC) 
    .equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())); // true 

隨着文檔狀態,如果使用"Z""+0"作爲輸入ID,of將直接返回了ZoneOffset並沒有必要調用normalized()

now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("Z"))); //true 
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("+0"))); //true 

要如果他們存儲了相同的日期時間,則可以使用isEqual方法代替

now.withZoneSameInstant(ZoneOffset.UTC) 
    .isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))); // true 

樣品

System.out.println("equals - ZoneId.of(\"UTC\"): " + nowZoneOffset 
     .equals(now.withZoneSameInstant(ZoneId.of("UTC")))); 
System.out.println("equals - ZoneId.of(\"UTC\").normalized(): " + nowZoneOffset 
     .equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized()))); 
System.out.println("equals - ZoneId.of(\"Z\"): " + nowZoneOffset 
     .equals(now.withZoneSameInstant(ZoneId.of("Z")))); 
System.out.println("equals - ZoneId.of(\"+0\"): " + nowZoneOffset 
     .equals(now.withZoneSameInstant(ZoneId.of("+0")))); 
System.out.println("isEqual - ZoneId.of(\"UTC\"): "+ nowZoneOffset 
     .isEqual(now.withZoneSameInstant(ZoneId.of("UTC")))); 

輸出:

equals - ZoneId.of("UTC"): false 
equals - ZoneId.of("UTC").normalized(): true 
equals - ZoneId.of("Z"): true 
equals - ZoneId.of("+0"): true 
isEqual - ZoneId.of("UTC"): true 
6

如果你把他們都在字符串中,你會看到,第一個是 2016 -09-15T09: 01:13.816Z,第二個是2016-09-15T09:01:13.816Z [UTC]他們實際上是相同的,但與你了zoneid得到一個額外的[UTC]

編輯:檢查@DVarga爲了以你想要的方式得到它的答案

相關問題