613 Stimmen

Konvertierung zwischen java.time.LocalDateTime und java.util.Date

Java 8 hat eine völlig neue API für Datum und Zeit. Einer der nützlichsten Klassen in dieser API ist LocalDateTime, zum Halten eines zeitzoneunabhängigen Datumszeitwerts.

Es gibt wahrscheinlich Millionen von Codezeilen, die die veraltete Klasse java.util.Date für diesen Zweck verwenden. Daher wird es beim Schnittstellen von altem und neuem Code eine Notwendigkeit geben, zwischen den beiden zu konvertieren. Da es anscheinend keine direkten Methoden zur Erledigung gibt, wie kann dies erreicht werden?

8voto

dizzy Punkte 89

Das folgende scheint zu funktionieren, wenn man von der neuen API LocalDateTime in java.util.Date konvertiert:

Date.from(ZonedDateTime.of({Zeit als LocalDateTime}, ZoneId.systemDefault()).toInstant());

Die umgekehrte Konvertierung kann hoffentlich auf ähnliche Weise erreicht werden...

Ich hoffe, es hilft...

6voto

humazed Punkte 70855

Wenn Sie Android verwenden und threetenbp verwenden, können Sie stattdessen DateTimeUtils verwenden.

z. B.:

Datum datum = DateTimeUtils.toDate(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

Sie können nicht Date.from verwenden, da dies nur ab API 26 unterstützt wird

4voto

Knut Arne Vedaa Punkte 14822

Ich bin mir nicht sicher, ob dies der einfachste oder beste Weg ist, oder ob es irgendwelche Fallstricke gibt, aber es funktioniert:

static public LocalDateTime toLdt(Date date) {
    GregorianCalendar cal = new GregorianCalendar();
    cal.setTime(date);
    ZonedDateTime zdt = cal.toZonedDateTime();
    return zdt.toLocalDateTime();
}

static public Date fromLdt(LocalDateTime ldt) {
    ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());
    GregorianCalendar cal = GregorianCalendar.from(zdt);
    return cal.getTime();
}

0voto

Akhil S Kamath Punkte 1012

Ich denke, der folgende Ansatz löst die Konvertierung ohne Berücksichtigung der Zeitzone. Bitte kommentieren Sie, wenn es irgendwelche Fallstricke gibt.

    LocalDateTime datetime //Eingabe
    public static final DateTimeFormatter yyyyMMddHHmmss_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String formatDateTime = datetime.format(yyyyMMddHHmmss_DATE_FORMAT);
    Date outputDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(formatDateTime); //Ausgabe

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