Wie konvertieren von Augenblick zu LocalDate
Habe ich eine Instant-kommen aus einer Quelle, die sollte, laut spec, ein LocalDate, aber nicht sehen, alle Methoden in LocalDate für die Konvertierung. Was ist der beste Weg, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
LocalDate.ofInstant(...);
Ich glaube Hinzugefügt wurde in Java 9.
LocalDateTime hat, die Methode in Java 8.
yourInstant.atZone(yourZoneId).toLocalDate();
Funktioniert mit früheren Versionen für LocalDate...
Anderen Antworten, die sich die mechanik für die transformation, aber ich wollte fügen Sie einige Hintergrundinformationen über die Bedeutung einer solchen transformation, die hoffentlich hilft zu erklären, warum es funktioniert, wie es funktioniert.
LocalDate
undInstant
ähnlich zu sein scheinen, – Sie beide halten Datum(/Zeit) - Informationen, ohne die Zeitzonen-Informationen. Jedoch, Sie haben eine ganz andere Bedeutung.Instant
repräsentiert einen Punkt in der Zeit, eindeutig. Die Darstellung nicht explizit enthalten alle Zeit-zone, aber implizit bezieht er sich auf die UTC-Zeit Linie.LocalDateTime
(undLocalDate
) ist mehrdeutig, denn es stellt einen Punkt in der lokalen timeline, die implizit bezieht sich auf die lokalen Zeitzone.So, in Ordnung, korrekt zu transformieren
Instant
in eineLocalDateTime
(konzeptionell – einige dieser Schritte sind gebündelt in einer einzigen operation in der Umsetzung) müssen Sie:1. konvertieren Sie die
Instant
in eineZonedDateTime
durch die Anwendung der Zeitzone UTC-info2. ändern der Zeitzone von UTC auf die lokalen Zeitzone (was bedeutet, die Anwendung der relevanten Zeitzonen-offset), die Ihnen ein weiteres
ZonedDateTime
(mit anderen Zeitzone)3. konvertieren Sie die
ZonedDateTime
in eineLocalDateTime
was macht die implizite Zeitzone (lokalen), indem Sie die Zeit-zone info.Schließlich, drop können Sie die Zeit-Teil
LocalDateTime
und am Ende mit derLocalDate
.Wenn die mit java 8 können Sie die folgenden
Müssen Sie sich selbst Fragen, was zone offset, die Sie wollen, um es zu transformieren, um die meisten wahrscheinlich und, wenn Sie wissen die Antwort:
BEARBEITEN
erkannte, dass dies ist nur möglich, da java-9, für eine pre-java9 sehen die andere Antwort