460 Stimmen

Konvertieren Sie java.time.LocalDate in den Typ java.util.Date

Ich möchte java.time.LocalDate in den Typ java.util.Date umwandeln. Denn ich möchte das Datum in JDateChooser setzen. Oder gibt es einen Datumswähler, der java.time-Datums unterstützt?

677voto

JB Nizet Punkte 654813
Datum date = Datum.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Dies setzt voraus, dass Ihr Datumsauswähler die systemstandard Zeitzone verwendet, um Daten in Zeichenfolgen zu verwandeln.

137voto

Brice Roncace Punkte 9371

Hier ist eine Hilfsklasse, die ich verwende, um die neueren java.time-Klassen in java.util.Date-Objekte und umgekehrt zu konvertieren:

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public class DateUtils {

  public static Date asDate(LocalDate localDate) {
    return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
  }

  public static Date asDate(LocalDateTime localDateTime) {
    return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
  }

  public static LocalDate asLocalDate(Date date) {
    return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
  }

  public static LocalDateTime asLocalDateTime(Date date) {
    return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
  }
}

Bearbeitet basierend auf dem Kommentar von @Oliv.

111voto

George Punkte 6676

Haftungsausschluss: Nur zur Veranschaulichung vorhandener Java-APIs. Sollte nicht im Produktionscode verwendet werden.

Sie können die Methode java.sql.Date.valueOf() wie folgt verwenden:

Date date = java.sql.Date.valueOf(localDate);

Hier ist es nicht erforderlich, Zeit- und Zeitzoneninformationen hinzuzufügen, da diese implizit übernommen werden.
Siehe Einfachste Umwandlung von LocalDate in java.util.Date und umgekehrt?

20voto

Kevin Sadler Punkte 2116

Java.time hat das Temporal-Interface, das Sie verwenden können, um Instant-Objekte aus den meisten der Klassen zu erstellen. Instant repräsentiert Millisekunden auf der Zeitleiste im Epoch - der Basiskomponente für alle anderen Daten und Zeiten.

Wir müssen das Datum in ein ZonedDateTime umwandeln, mit einer Zeit und einer Zone, um die Konvertierung durchzuführen:

LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);

14voto

nosid Punkte 47014

Um ein java.util.Date aus einem java.time.LocalDate zu erstellen, müssen Sie:

  • ein Zeit zum LocalDate hinzufügen
  • das Datum und die Uhrzeit innerhalb einer Zeitzone interpretieren
  • die Anzahl der Sekunden / Millisekunden seit Epoch erhalten
  • ein java.util.Date erstellen

Der Code könnte wie folgt aussehen:

LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);

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