Je veux convertir Java.time.LocalDate
en Java.util.Date
type. Parce que je veux définir la date dans JDateChooser
. Ou y a-t-il un sélecteur de date qui prend en charge Java.time
dates?
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Cela suppose que votre sélecteur de date utilise le fuseau horaire par défaut du système pour transformer les dates en chaînes.
Voici une classe d’utilitaire que j’utilise pour convertir les nouvelles classes Java.time
en objets Java.util.Date
et inversement:
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();
}
}
Edité sur la base du commentaire @Oliv.
Vous pouvez utiliser la méthode Java.sql.Date.valueOf()
comme:
Date date = Java.sql.Date.valueOf(localDate);
Inutile d'ajouter l'heure et le fuseau horaire ici car ils sont pris implicitement.
Voir LocalDate to Java.util.Date et réciproquement la conversion la plus simple?
Java.time possède l'interface Temporal que vous pouvez utiliser pour créer des objets Instant à partir de la plupart des classes time. Instant représente des millisecondes sur la timeline de Epoch - la référence de base pour toutes les autres dates et heures.
Nous devons convertir la date en ZonedDateTime, avec une heure et une zone, pour effectuer la conversion:
LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);
Pour créer un Java.util.Date à partir d'un Java.time.LocalDate, vous devez
Le code pourrait ressembler à ceci:
LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);
Cela fonctionne pour moi:
Java.util.Date d = new SimpleDateFormat("yyyy-MM-dd").parse(localDate.toString());
https://docs.Oracle.com/javase/8/docs/api/Java/time/LocalDate.html#toString--
Solution Kotlin:
1) Collez cette fonction d’extension quelque part.
fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())
2) Utilisez-le, et ne plus jamais google cela.
val myDate = myLocalDate.toDate()