Convierta java.time.LocalDate al tipo java.util.Date

Resuelto Kavinda Gehan asked hace 10 años • 13 respuestas

Quiero convertir java.time.LocalDatea java.util.Datetipo. Porque quiero fijar la fecha en JDateChooser. ¿O hay algún selector de fechas que admita java.timefechas?

Kavinda Gehan avatar Apr 08 '14 13:04 Kavinda Gehan
Aceptado
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Eso supone que su selector de fecha usa la zona horaria predeterminada del sistema para transformar fechas en cadenas.

JB Nizet avatar Apr 08 '2014 06:04 JB Nizet

Aquí hay una clase de utilidad que uso para convertir las java.timeclases más nuevas en java.util.Dateobjetos y viceversa:

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

Editado según el comentario de @Oliv.

Brice Roncace avatar Dec 05 '2014 19:12 Brice Roncace

Descargo de responsabilidad: solo para ilustrar las API de Java existentes. No debe usarse en código de producción.

Puedes usar java.sql.Date.valueOf()el método como:

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

No es necesario agregar información de hora y zona horaria aquí porque se toman implícitamente.
¿Ver LocalDate a java.util.Date y viceversa la conversión más simple?

George avatar Feb 17 '2015 14:02 George

java.time tiene la interfaz Temporal que puede usar para crear objetos instantáneos a partir de la mayoría de las clases de tiempo. Instant representa milisegundos en la línea de tiempo de la Época, la referencia base para todas las demás fechas y horas.

Necesitamos convertir la Fecha en ZonedDateTime, con una Hora y una Zona, para realizar la conversión:

LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);
Kevin Sadler avatar Dec 02 '2014 10:12 Kevin Sadler

Esto funciona para mí:

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

ceklock avatar Mar 21 '2015 21:03 ceklock