Convertir java.temps.LocalDate dans java.util.Date type


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 rendez-vous?

Author: Michael Piefel, 2014-04-08

11 answers

Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Qui suppose que votre sélecteur de date utilise le fuseau horaire par défaut du système pour transformer les dates en chaînes.

 377
Author: JB Nizet, 2014-04-08 06:39:29

Voici une classe utilitaire que j'utilise pour convertir les nouvelles classes java.time en objets java.util.Date et vice versa:

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();
  }
}

Édité sur la base du commentaire @Oliv.

 86
Author: Brice Roncace, 2014-12-15 15:38:21

Vous pouvez utiliser la méthode java.sql.Date.valueOf() comme:

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

Pas besoin d'ajouter des informations sur l'heure et le fuseau horaire ici car elles sont prises implicitement.
Voir Localisation en java.util.Date et vice versa la conversion la plus simple?

 66
Author: George, 2017-05-23 10:31:36

Java.time a l'interface temporelle que vous pouvez utiliser pour créer des objets instantanés à partir de la plupart des classes de temps. Instant représente les millisecondes sur la timeline de l'époque - 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);
 13
Author: Kevin Sadler, 2015-06-17 23:33:43

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

 10
Author: ceklock, 2015-03-21 21:03:01

, afin de créer un java.util.Date à partir d'un java.temps.LocalDate , vous devez

  • ajouter une heure au LocalDate
  • interpréter la date et l'heure dans un fuseau horaire
  • retourne le nombre de secondes / millisecondes depuis le époque
  • créer un java.util.Date

Le code peut se présenter comme suit:

LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);
 10
Author: nosid, 2018-02-28 09:51:30

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 google plus jamais cela.

val myDate = myLocalDate.toDate()
 4
Author: gyoder, 2018-04-19 20:05:50

Alternativement, autre que la conversion du LocalDate en un Instant , on peut faire ceci:

new Date(localDate.toEpochDay() * DateUtils.MILLIS_PER_DAY);

DateUtils.MILLIS_PER_DAY vient de commons-lang3.

Ceci est sûrement aussi inexact que Date lorsque des secondes intercalaires existent, ce qui est aussi la raison pour laquelle nous ne devrions plus utiliser java.util.Date.

 0
Author: ryenus, 2018-06-05 06:26:16
public static Date convertToTimeZone(Date date, String tzFrom, String tzTo) {
    return Date.from(LocalDateTime.ofInstant(date.toInstant(), ZoneId.of(tzTo)).atZone(ZoneId.of(tzFrom)).toInstant());
} 
 -1
Author: William Nguyen, 2016-02-22 09:42:23

Simple

public Date convertFrom(LocalDate date) {
    return java.sql.Timestamp.valueOf(date.atStartOfDay());
}
 -1
Author: Artur Luiz Oliveira, 2016-03-15 02:58:52

Cette solution ici est un peu plus longue et vous pouvez également inclure quelque chose pour le moment ici, mais pour autant que je comprenne votre problème, vous avez juste besoin de la date réelle.

int day = this.datePicker2.getDate().getDayOfMonth();
int month = this.datePicker2.getDate().getMonthValue();
int year = this.datePicker2.getDate().getYear();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month-1);
calendar.set(Calendar.DATE, day);
Date date = calendar.getTime();

Peut ne pas avoir l'air aussi élégant mais cela fonctionne. Remarque: le mois-1 est utilisé car les mois du calendrier commencent par 0.

 -1
Author: Alexander Heim, 2017-08-07 07:41:52