Convierta java.time.LocalDate al tipo java.util.Date
Quiero convertir java.time.LocalDate
a java.util.Date
tipo. Porque quiero fijar la fecha en JDateChooser
. ¿O hay algún selector de fechas que admita java.time
fechas?
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.
Aquí hay una clase de utilidad que uso para convertir las java.time
clases más nuevas en java.util.Date
objetos 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.
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?
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);
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--