Wie kann ich wieder LocalDate.jetzt() in Millisekunden?
Erstelle ich date jetzt:
ZoneId gmt = ZoneId.of("GMT");
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDateNow = localDateTime.toLocalDate();
Dann möchte ich wieder dieses Datum in Millisekunden:
localDateNow.atStartOfDay(gmt) - 22.08.2017
localDateNow.atStartOfDay(gmt).toEpochSecond(); - 1503360000 (18.01.70)
Wie kann ich wieder LocalDate.now()
in Millisekunden?
Wie kann ein Datum haben, Millisekunden? Millisekunden ist Teil der Zeitstempel nicht das Datum
localDateTime.atZone(gmt).toEpochSecond() return 1503403331 (18.01.70)
Was du redest
Instand-aof aufrufen toEpochSecond(), Aufruf toInstant().toEpochMilli()
Nizet Danke! genau das, was benötigt wird!
localDateTime.atZone(gmt).toEpochSecond() return 1503403331 (18.01.70)
Was du redest
LocalDate
oder LocalDateTime
? Fragen Sie für LocalDate und geben Beispiel für LocalDateTime
.Instand-aof aufrufen toEpochSecond(), Aufruf toInstant().toEpochMilli()
Nizet Danke! genau das, was benötigt wird!
InformationsquelleAutor user5620472 | 2017-08-22
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufrufen
toInstant().toEpochMilli()
, wie vorgeschlagen, durch @JB Nizet Kommentar, ist die richtige Antwort, aber es gibt ein kleines und kniffliges detail über die Verwendung von lokalen Daten, die Sie bewusst sein müssen.Aber vor, dass einige andere kleine details:
ZoneId.of("GMT")
können Sie die eingebaute KonstanteZoneOffset.UTC
. Sie sind gleichwertig, aber es gibt keine Notwendigkeit, erstellen Sie zusätzliche redundante Objekte, wenn die API bietet bereits eine, die tut genau das gleiche.LocalDateTime.now()
und dann.toLocalDate()
sind, können Sie anrufenLocalDate.now()
direkt - Sie sind äquivalent.Nun die knifflige details: beim Aufruf der
now()
Methode (entwederLocalDateTime
oderLocalDate
), verwendet es die Standard-JVM-Zeitzone, um die Werte für das aktuelle Datum, und dieser Wert kann unterschiedlich sein, je nach Zeitzone konfiguriert, die in der JVM.In der JVM-ich bin mit der Standard-Zeitzone ist
America/Sao_Paulo
, und die Ortszeit hier ist 09:37 UHR. SoLocalDate.now()
zurück2017-08-22
(August 22th 2017).Aber wenn ich ändern Sie die Standard-Zeitzone zu
Pacific/Kiritimati
, es gibt2017-08-23
. Das ist, weil in Kiritimati, jetzt ist schon August 23th 2017 (und die lokale Zeit im moment ich dies Schreibe, ist 02:37 UHR).So, wenn ich diesen code ausführen, wenn die Standard-Zeitzone ist
Pacific/Kiritimati
:Ausgabe:
Was ist das äquivalent von August 23th 2017 um Mitternacht UTC.
Wenn ich den gleichen code, wenn Sie die Standard-Zeitzone ist
America/Sao_Paulo
, das Ergebnis wird sein:Was ist das äquivalent von August 22th 2017 um Mitternacht UTC.
Mit
now()
lässt sich der code hängt von der JVM - Zeitzone. Und diese Konfiguration kann ohne Vorherige Ankündigung geändert werden, sogar während der Laufzeit, wodurch der code unterschiedliche Ergebnisse zurückgeben, wenn eine solche änderung Eintritt.Ist und Sie brauchen nicht ein so extremer Fall (wie jemand misconfiguring die JVM auf ein "sehr-weit" - Zeitzone). In meinem Fall, zum Beispiel, in
America/Sao_Paulo
Zeitzone, wenn ich den code ausführen bei 11 Uhr,LocalDate
zurück August 22th, aber das aktuelle Datum in UTC bereits August 23th. Das ist, weil 11 Uhr in São Paulo ist das gleiche wie 2 UHR des nächsten Tag in UTC:Also mit
LocalDate.now()
ist nicht eine Garantie, dass ich werde immer die aktuelle Datum in UTC.Wenn Sie möchten, dass die aktuelle Datum in UTC (unabhängig von der JVM-Zeitzone) und stellen Sie die Zeit, um Mitternacht, es ist besser ein
ZonedDateTime
:Ausgabe:
Was ist das äquivalent von August 22th 2017 um Mitternacht UTC.
Andere alternative ist die übergabe der Zeitzone
LocalDate.now
, so kann es die richtigen Werte für das aktuelle Datum auf dem angegebenen zone:InformationsquelleAutor