web-dev-qa-db-fra.com

Convertir Java.time.LocalDate en type Java.util.Date

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?

322
Kavinda Gehan
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.

509
JB Nizet

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.

94
Brice Roncace

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?

84
George

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);
14
Kevin Sadler

Pour créer un Java.util.Date à partir d'un Java.time.LocalDate, vous devez

  • ajouter un temps au LocalDate
  • interpréter la date et l'heure dans un fuseau horaire
  • obtenir le nombre de secondes/millisecondes depuis Epoch
  • créer un Java.util.Date

Le code pourrait ressembler à ceci:

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

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--

11
ceklock

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()
2
gyoder