Pourquoi est-Écartfuseau.L'UTC != ZoneId.d'(“UTC”)?
Pourquoi ne
ZonedDateTime now = ZonedDateTime.now();
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC)
.equals(now.withZoneSameInstant(ZoneId.of("UTC"))));
imprimer false
?
J'attendrais la fois ZonedDateTime
cas être égale.
Vous devez vous connecter pour publier un commentaire.
La réponse vient de la javadoc de
ZoneId
(l'emphase est mienne) ...... et de la javadoc de
ZoneId#de
(l'emphase est mienne):L'argument l'id est spécifié comme
"UTC"
, donc il sera de retour uneZoneId
avec un décalage, qui a également présenté dans le formulaire de chaîne:Sorties:
Que vous utilisez le
equals
méthode à des fins de comparaison, vous vérifier pour objet l'équivalence. En raison de l'décrit la différence, le résultat de l'évaluation estfalse
.Lorsque le
normalisée()
méthode est utilisée comme proposé dans la documentation, de la comparaison à l'aide deequals
sera de retourtrue
, commenormalized()
sera de retour le correspondantZoneOffset
:Que les états de documentation, si vous utilisez
"Z"
ou"+0"
comme id d'entrée,of
sera de retour leZoneOffset
directement et il n'est pas nécessaire d'appelernormalized()
:Pour vérifier si ils gardent la même date heure, vous pouvez utiliser le
isEqual
plutôt la méthode:Échantillon
De sortie: