Die InstantKlasse repräsentiert einen augenblicklichen Punkt auf der Zeitachse. Die Konvertierung von und nach a LocalDateerfordert 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).
Ich denke, dies ist nützlicher als die akzeptierte Antwort, da ZoneId (Zeitzone) der Parameter ist und nicht ZoneOffset (Stunden verschoben von UTC, die sich für eine Zeitzone im Sommer / Winter ändern können).
wuerg
1
In einem Unit-Test, 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, erhalte ich das erwartete LocalDate als Gegenleistung, aber wenn ich diesen Ansatz verwende, bekomme ich "gestern" zurück anstatt "heute". Meine Zeitzone ist GMT + 1
Nadrendion
127
Um es in einen Moment zu konvertieren, benötigen Sie eine LocalDateTime-Instanz, z.
LocalDate
keine Zeit enthält.Antworten:
Die
Instant
Klasse repräsentiert einen augenblicklichen Punkt auf der Zeitachse. Die Konvertierung von und nach aLocalDate
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.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 akzeptiertZoneOffset
. Diese Antwort verwendet,LocalDate::atStartOfDay(ZoneId)
die keine akzeptiertZoneId
. Daher ist diese Antwort im Allgemeinen nützlicher (und sollte wahrscheinlich die akzeptierte sein).PS. Ich war der Hauptautor der API
quelle
Um es in einen Moment zu konvertieren, benötigen Sie eine LocalDateTime-Instanz, z.
quelle