Wie konvertiert man ein LocalDate in ein Instant?

Lesezeit: 2 Minuten

Benutzer-Avatar
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.

  • Weil ein LocalDate enthält keine Zeit.

    – Orangenhund

    27. Mai 2016 um 9:35 Uhr

Benutzer-Avatar
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

1345750cookie-checkWie konvertiert man ein LocalDate in ein Instant?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy