La réponse vient de la javadoc de l' ZoneId
(l'emphase est mienne) ...
Un ZoneId est utilisé pour identifier les règles utilisées pour convertir entre une
Instantanée et un LocalDateTime. Il existe deux types distincts de ID:
- Fixe les décalages, totalement résolu décalage UTC/gmt, Greenwich, qui utilise le même décalage pour tous les locaux de la date et l'heure
- Régions géographiques - une zone où un ensemble de règles spécifiques pour trouver le décalage par rapport à UTC/gmt, Greenwich appliquer
La plupart des offsets fixes sont représentés par Écartfuseau. Appel normalisé()
sur toute ZoneId veillera à ce qu'un fixe décalage ID seront représentés
comme un Écartfuseau.
... et de la javadoc de l' ZoneId#of
(l'emphase est mienne):
Cette méthode d'analyse de l'ID de la production d'un ZoneId ou Écartfuseau. Un
Écartfuseau est renvoyée si l'ID est 'Z', ou commence par '+' ou '-'.
L'argument l'id est spécifié en tant que "UTC"
, donc il sera de retour une ZoneId
avec un décalage, qui a également présenté dans la forme d'une chaîne:
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC));
System.out.println(now.withZoneSameInstant(ZoneId.of("UTC")));
Sorties:
2017-03-10T08:06:28.045Z
2017-03-10T08:06:28.045Z[UTC]
Lorsque vous utilisez l' equals
méthode de comparaison, vous vérifiez pour objet d'équivalence. En raison de l'décrit la différence, le résultat de l'évaluation est - false
.
Lorsque l' normalized()
méthode est utilisée comme proposé dans la documentation, de la comparaison à l'aide de equals
sera de retour true
, normalized()
sera de retour correspondantes ZoneOffset
:
Normalise le temps-ID de zone, de retour d'un Écartfuseau lorsque cela est possible.
now.withZoneSameInstant(ZoneOffset.UTC)
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())); // true
Comme les états de documentation, si vous utilisez "Z"
ou "+0"
comme id d'entrée, of
sera de retour l' ZoneOffset
directement et il n'est pas nécessaire d'appeler normalized()
:
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("Z"))); //true
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("+0"))); //true
Pour vérifier si ils gardent la même date, l'heure, vous pouvez utiliser l' isEqual
méthode de:
now.withZoneSameInstant(ZoneOffset.UTC)
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))); // true
Exemple
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"))));
Sortie:
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