¿Cómo convertir un LocalDate a un Instant?

2 minutos de lectura

avatar de usuario
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

  • Porque un LocalDate no incluye un tiempo.

    – perro naranja

    27 de mayo de 2016 a las 9:35

avatar de usuario
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

¿Ha sido útil esta solución?