425 Stimmen

Wie man Millisekunden von LocalDateTime in Java 8 erhält

Ich frage mich, ob es eine Möglichkeit gibt, die aktuellen Millisekunden seit dem 1.1.1970 (Epoch) mithilfe der neuen LocalDate, LocalTime oder LocalDateTime-Klassen von Java 8 zu erhalten.

Der bekannte Weg ist unten:

long currentMilliseconds = new Date().getTime();

oder

long currentMilliseconds = System.currentTimeMillis();

4voto

JeeBee Punkte 17329

Wenn Sie eine Java 8 Clock haben, können Sie clock.millis() verwenden (obwohl empfohlen wird, clock.instant() zu verwenden, um eine Java 8 Instant zu erhalten, da sie genauer ist).

Warum sollte man eine Java 8 Uhr verwenden? Damit Sie in Ihrem DI-Framework eine Clock-Bohne erstellen können:

@Bean
public Clock getClock() {
    return Clock.systemUTC();
}

und dann in Ihren Tests können Sie sie einfach mocken:

@MockBean private Clock clock;

oder Sie können eine andere Bohne haben:

@Bean
public Clock getClock() {
    return Clock.fixed(instant, zone);
}

was bei Tests, die Daten und Zeiten überprüfen, unermesslich hilft.

4voto

JianrongChen Punkte 146

Ich denke, das ist einfacher:

ZonedDateTime zdt = ZonedDateTime.of(LocalDateTime.now(), ZoneId.systemDefault());
Assert.assertEquals(System.currentTimeMillis(), zdt.toInstant().toEpochMilli());

Holen Sie sich die Millisekunden wie System.currentTimeMillis() (von UTC).

3voto

ognjenkl Punkte 904

Datum und Uhrzeit als String in Long (Millisekunden):

String dateTimeString = "2020-12-12T14:34:18.000Z";

DateTimeFormatter formatter = DateTimeFormatter
                .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH);

LocalDateTime localDateTime = LocalDateTime
        .parse(dateTimeString, formatter);

Long dateTimeMillis = localDateTime
        .atZone(ZoneId.systemDefault())
        .toInstant()
        .toEpochMilli();

2voto

Mohamed.Abdo Punkte 1696
 Standard LocalDateTime getDateFromLong(long timestamp) {
    try {
        return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneOffset.UTC);
    } catch (DateTimeException tdException) {
      //  throw new 
    }
}

Standard Long getLongFromDateTime(LocalDateTime dateTime) {
    return dateTime.atOffset(ZoneOffset.UTC).toInstant().toEpochMilli();
}

0voto

AgilePro Punkte 5192

Einfachste Konvertierung:

Instant.from(localDateTime).toEpochMilli()

ENTSCHULDIGUNG, das funktioniert nicht und führt zu folgendem Fehler:

"Nicht unterstütztes Feld: InstantSeconds",
"  java.base/java.time.LocalDate.get0(LocalDate.java:708)",
"  java.base/java.time.LocalDate.getLong(LocalDate.java:687)",
"  java.base/java.time.LocalDateTime.getLong(LocalDateTime.java:720)",
"  java.base/java.time.Instant.from(Instant.java:373)",
"  com.capitalone.rupol.ruleengine.util.LocalDateSerializer.serialize(LocalDateSerializer.java:25)",
"Instant kann nicht aus TemporalAccessor erhalten werden: 2024-02-03T00:00 des Typs java.time.LocalDateTime",
"  java.base/java.time.Instant.from(Instant.java:378)",
"  com.capitalone.rupol.ruleengine.util.LocalDateSerializer.serialize(LocalDateSerializer.java:25)",
"  com.capitalone.rupol.ruleengine.util.LocalDateSerializer.serialize(LocalDateSerializer.java:11)",
"  com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)",
"  com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)",

Die LocalDateTime trägt keine Zeitzone. Die Instant trägt keine Zeitzone. Seltsamerweise erfordern viele andere Konvertierungen das Angeben einer Zeitzone, die nicht erforderlich ist. Dies vermeidet die Verwendung einer Zeitzone-Offset in jedem Schritt und konvertiert intern von Millisekunden zu Millisekunden.

Es ist merkwürdig, dass die LocalDateTime keine Konvertierung zu Instant anbietet, da sowohl LocalDateTime als auch Instant keine Zeitzone-Repräsentation beinhalten, aber diese Factory-Methode den Job erledigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X