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?
Antworten
Zu viele Anzeigen?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.
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?
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);
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);
- See previous answers
- Weitere Antworten anzeigen