Ich arbeite mit der neuen DateTime API von Java 8.
Wie konvertiert man ein LocalDate in ein Instant? Ich bekomme eine Ausnahme mit
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
und ich verstehe nicht warum.
Benutzer1643352
Ich arbeite mit der neuen DateTime API von Java 8.
Wie konvertiert man ein LocalDate in ein Instant? Ich bekomme eine Ausnahme mit
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
und ich verstehe nicht warum.
Joda Stephen
Das Instant
Klasse repräsentiert einen Momentanpunkt auf der Zeitachse. Konvertierung zu und von a LocalDate
erfordert eine Zeitzone. Im Gegensatz zu einigen anderen Datums- und Zeitbibliotheken wählt JSR-310 die Zeitzone nicht automatisch für Sie aus, also müssen Sie sie angeben.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Dieses Beispiel verwendet die Standardzeitzone der JVM – ZoneId.systemDefault()
– Um die Konvertierung durchzuführen. Hier finden Sie eine längere Antwort auf eine verwandte Frage.
Update: Die akzeptierte Antwort verwendet LocalDateTime::toInstant(ZoneOffset)
die nur akzeptiert ZoneOffset
. Diese Antwort verwendet LocalDate::atStartOfDay(ZoneId)
die alle akzeptiert ZoneId
. Daher ist diese Antwort im Allgemeinen nützlicher (und sollte wahrscheinlich die akzeptierte sein).
PS. Ich war der Hauptautor der API
Ich denke, dies ist die nützlichere als die akzeptierte Antwort, da ZoneId (Zeitzone) der Parameter ist und nicht ZoneOffset (von UTC verschobene Stunden, die sich im Sommer/Winter für eine Zeitzone ändern können).
– wuerg
12. Juni 2018 um 12:01 Uhr
In einem Komponententest, den ich schreibe, habe ich ein LocalDate, das in einen com.google.protobuf.Timestamp konvertiert und dann über einen Instant in beide Richtungen einem LocalDate zugeordnet wird. Wenn ich den Ansatz verwende, den die akzeptierte Antwort vorschlägt, bekomme ich das erwartete LocalDate zurück, aber mit diesem Ansatz gibt mir “gestern” statt “heute” zurück. Meine Zeitzone ist GMT+1
– Nadrendion
16. Januar 2019 um 7:30 Uhr
Um es in einen Augenblick umzuwandeln, benötigen Sie eine LocalDateTime-Instanz, z.
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
Danke vielmals. Ich verstehe jetzt, dass ich eine Zeitzone angeben muss, um einen Instant zu erhalten.
– Benutzer1643352
22. April 2014 um 9:47 Uhr
einwandfreie antwort!
– Gaurav
18. August 2021 um 23:54 Uhr
Weil ein
LocalDate
enthält keine Zeit.– Orangenhund
27. Mai 2016 um 9:35 Uhr