Ich arbeite mit der neuen DateTime-API von Java 8.
Wie konvertiere ich 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.
Ich arbeite mit der neuen DateTime-API von Java 8.
Wie konvertiere ich 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.
Antworten:
Die Instant
Klasse repräsentiert einen augenblicklichen Punkt auf der Zeitachse. Die Konvertierung von und nach 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, daher müssen Sie sie bereitstellen.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
In diesem Beispiel wird die Standardzeitzone der JVM - ZoneId.systemDefault()
- verwendet, 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 keine akzeptiert ZoneId
. Daher ist diese Antwort im Allgemeinen nützlicher (und sollte wahrscheinlich die akzeptierte sein).
PS. Ich war der Hauptautor der API
Um es in einen Moment zu konvertieren, benötigen Sie eine LocalDateTime-Instanz, z.
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
keine Zeit enthält.