Trabajo con la nueva API DateTime de Java 8.
¿Cómo convertir un LocalDate en un Instant? Obtengo una excepción con
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
y no entiendo por qué.
Trabajo con la nueva API DateTime de Java 8.
¿Cómo convertir un LocalDate en un Instant? Obtengo una excepción con
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
y no entiendo por qué.
Respuestas:
La Instant
clase representa un punto instantáneo en la línea de tiempo. La conversión hacia y desde a LocalDate
requiere una zona horaria. A diferencia de otras bibliotecas de fecha y hora, JSR-310 no seleccionará la zona horaria automáticamente, por lo que debe proporcionarla.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Este ejemplo utiliza la zona horaria predeterminada de la JVM - ZoneId.systemDefault()
- para realizar la conversión. Consulte aquí para obtener una respuesta más extensa a una pregunta relacionada.
Actualización: La respuesta aceptada usa LocalDateTime::toInstant(ZoneOffset)
que solo acepta ZoneOffset
. Esta respuesta usa LocalDate::atStartOfDay(ZoneId)
que acepta cualquiera ZoneId
. Como tal, esta respuesta es generalmente más útil (y probablemente debería ser la aceptada).
PD. Yo era el autor principal de la API
Para convertirlo en un instante, debe tener una instancia de LocalDateTime, por ejemplo:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
no incluye una hora.