Saltar al contenido

¿Cómo convertir java.sql.timestamp a LocalDate (java8) java.time?

Solución:

Tu puedes hacer:

timeStamp.toLocalDateTime().toLocalDate();

Tenga en cuenta que timestamp.toLocalDateTime() usará el Clock.systemDefaultZone() zona horaria para realizar la conversión. Esto puede o no ser lo que desea.

La respuesta aceptada no es la ideal, así que decidí agregar mis 2 centavos

timeStamp.toLocalDateTime().toLocalDate();

es una mala solución en general, Ni siquiera estoy seguro de por qué agregaron este método al JDK, ya que hace que las cosas sean realmente confusas al hacer una conversión implícita utilizando la zona horaria del sistema. Por lo general, cuando se usan solo clases de fecha java8, el programador se ve obligado a especificar una zona horaria, lo cual es bueno.

La buena solucion es

timestamp.toInstant().atZone(zoneId).toLocalDate()

Dónde zoneId es la zona horaria que desea utilizar, que suele ser ZoneId.systemDefault () si desea utilizar la zona horaria de su sistema o alguna zona horaria codificada como ZoneOffset.UTC

El enfoque general debe ser

  1. Libérese de las nuevas clases de fecha java8 utilizando una clase que esté directamente relacionada, por ejemplo, en nuestro caso java.time.Instant está directamente relacionado con java.sql.Timestamp, es decir, no se necesitan conversiones de zona horaria entre ellos.
  2. Utilice los métodos bien diseñados en esta clase java8 para hacer lo correcto. En nuestro caso atZone (zoneId) hizo explícito que estamos haciendo una conversión y usando una zona horaria particular para ello.

Ampliaré ligeramente la respuesta de @assylias para tener en cuenta la zona horaria. Hay al menos dos formas de obtener LocalDateTime para una zona horaria específica.

Puede utilizar la zona horaria setDefault para toda la aplicación. Se debe llamar antes de cualquier marca de tiempo -> conversión java.time:

public static void main(String... args) {
    TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
    TimeZone.setDefault(utcTimeZone);
    ...
    timestamp.toLocalDateTime().toLocalDate();
}

O puede usar la cadena toInstant.atZone:

timestamp.toInstant()
        .atZone(ZoneId.of("UTC"))
        .toLocalDate();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *