La Instantclase representa un punto instantáneo en la línea de tiempo. La conversión hacia y desde a LocalDaterequiere 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).
Creo que esta es la respuesta más útil que la aceptada, ya que ZoneId (zona horaria) es el parámetro y no ZoneOffset (horas desplazadas de UTC, que pueden cambiar para una zona horaria en verano / invierno).
wuerg
1
En una prueba unitaria que estoy escribiendo, tengo un LocalDate, que se convierte en un com.google.protobuf.Timestamp y luego se asigna de nuevo a un LocalDate a través de un Instant, en ambos sentidos. Cuando utilizo 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
Nadrendion
127
Para convertirlo en un instante, debe tener una instancia de LocalDateTime, por ejemplo:
LocalDate
no incluye una hora.Respuestas:
La
Instant
clase representa un punto instantáneo en la línea de tiempo. La conversión hacia y desde aLocalDate
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.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 aceptaZoneOffset
. Esta respuesta usaLocalDate::atStartOfDay(ZoneId)
que acepta cualquieraZoneId
. 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
fuente
Para convertirlo en un instante, debe tener una instancia de LocalDateTime, por ejemplo:
fuente