Es ist mein Verständnis, dass eine ZonedDateTime
ist wirklich eine erweiterte Version von Instant
. Es hat alle Daten, die ein Instant
hat (genauer Wert entlang der UTC-Zeitachse), plus Zeitzoneninformationen. Also meine naive Annahme war, dass ein ist-einInstant
und dass jede Methode, die eine Instant
nimmt glücklich statt ZonedDateTime
statt. Darüber hinaus erwartete ich isBefore()
, isAfter()
etc. nahtlos zwischen Instant
s und ZonedDateTime
s zu arbeiten.Kompatibilität zwischen Instant und ZonedDateTime
Wenn Sie die API-Dokumentation für Instant
und ZonedDateTime
betrachten, ist das alles nicht der Fall. Ich kann Instant
s mit Instant
s und ZonedDateTime
s mit ZonedDateTime
s vergleichen, aber die zwei Klassen scheinen inkompatibel zu sein. Darüber hinaus scheint Code von Drittanbietern wie ThreeTen-Extra Interval
ausschließlich mit Instant
s zu arbeiten.
Gibt es einen Grund, warum Instant
und ZonedDateTime
nicht zum Mischen gedacht sind?
Nun, sagt die Dokumentation deutlich, dass es gesehen werden soll, eine 'LocalDateTime', die mit einer Zone verbunden ist, notieren Sie sich als' Instant', gekoppelt mit einer Zone. Es enthält alle Datums- und Uhrzeitfelder, keinen Offset von einem Punkt in UTC. Warum erwarten Sie, dass es sich anders verhält als seine Dokumentation sagt? – RealSkeptic
Sie können ein 'ZonedDateTime' in ein' Instant' mit ['.toInstant()'] (http://docs.oracle.com/javase/8/docs/api/java/time/chrono/ChronoZonedDateTime.html) konvertieren # toInstant--), aber um von einem 'Instant' in ein' ZonedDateTime' zu konvertieren, müssen Sie ['ZonedDateTime.ofInstant'] (http://docs.oracle.com/javase/8/docs/api/java /time/ZonedDateTime.html#ofInstant-java.time.Instant-java.time.ZoneId-) und geben Sie eine 'ZoneId' an. – Powerlord