usuario1643352
Trabajo con la nueva API DateTime de Java 8.
¿Cómo convertir un LocalDate a un Instant? Obtengo una excepción con
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
y no entiendo porque
jodastephen
los Instant
clase representa un punto instantáneo en la línea de tiempo. Conversión hacia y desde un 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 JVM: ZoneId.systemDefault()
– para realizar la conversión. Consulte aquí para obtener una respuesta más larga a una pregunta relacionada.
Actualización: la respuesta aceptada utiliza LocalDateTime::toInstant(ZoneOffset)
que solo acepta ZoneOffset
. Esta respuesta usa LocalDate::atStartOfDay(ZoneId)
que acepta cualquier ZoneId
. Como tal, esta respuesta es generalmente más útil (y probablemente debería ser la aceptada).
PD. Fui el autor principal de la API.
-
Creo que esto es más útil que la respuesta aceptada, ya que ZoneId (zona horaria) es el parámetro y no ZoneOffset (horas cambiadas de UTC, que pueden cambiar para una zona horaria en verano/invierno).
– Wuerg
12 de junio de 2018 a las 12:01
-
En una prueba unitaria que estoy escribiendo, tengo una LocalDate, que se convierte en com.google.protobuf.Timestamp y luego se vuelve a asignar a una LocalDate a través de un Instant, en ambos sentidos. Cuando uso el enfoque que sugiere la respuesta aceptada, obtengo el LocalDate esperado a cambio, pero el uso de este enfoque me devuelve “ayer” en lugar de “hoy”. Mi zona horaria es GMT+1
– Nadrendión
16 de enero de 2019 a las 7:30
Para convertirlo en un instante, debe tener una instancia de LocalDateTime, por ejemplo:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
-
Muchas gracias. Ahora entiendo que necesito especificar una zona horaria para obtener un Instant.
– usuario1643352
22 de abril de 2014 a las 9:47
-
respuesta impecable!
– Gaurav
18 de agosto de 2021 a las 23:54
Porque un
LocalDate
no incluye un tiempo.– perro naranja
27 de mayo de 2016 a las 9:35