Diferencias entre ZonedDateTime y OffsetDateTime
En este artículo vamos a ver las diferencias entre ZonedDateTime y OffsetDateTime, ambos introducidos en el API de Java 8.
Vamos a intentar ver y aclarar cual usar para aquellas ocaciones en las que nos entran dudas.
Qué es OffsetDateTime?
El tipo de dato OffsetDateTime, el cual es inmutable, es un tipo date-time con un offset en ISO-8601. El objeto OffsetDateTime guarda toda la fecha con una precisión de nanosegundos así como el offset en GMT o UTC. Por ejemplo:
2027-05-05T12:25:30+02:00
A continuación vamos a crear un OffsetDateTime con un offset de 1 hora:
ZoneOffset zoneOffSet= ZoneOffset.of("+01:00"); OffsetDateTime offsetDateTime = OffsetDateTime.now(zoneOffSet);
Objeto ZonedDateTime
Al igual que OffsetDateTime, ZonedDateTime es un objeto inmutable del tipo date-time que se corresponde con la ISO-8601.
El tipo de datos ZonedDateTime esta compuesto por tres objetos:
- LocalDateTime: La hora incluyendo minutos y segundos.
- ZoneId: Determina el offset por ejemplo Europe/Paris
- ZoneOffset: El offset GMT/UTC.
Para obtener el ZoneId podemos obtenerlo de la siguiente manera:
ZoneId zone = ZoneId.of("Europe/Berlin");
Una vez tenemos el ZoneId podemos obtener el ZonedDateTime para una zona en concreto de la siguiente manera:
ZonedDateTime zonedDateTime = ZonedDateTime.now(zone);
La idea de ZonedDateTime es aplicarlo cuando queremos la hora o zona horario de un país en concreto.
Diferencia entre ZonedDateTime y OffsetDateTime
ZonedDateTime | OffsetDateTime |
---|---|
Almacena todos los campos de fecha y hora, con una precisión de nanosegundos con una zona horaria y un offset que no se puede establecer libremente. | Almacena todos los campos de fecha y hora, con una precisión de nanosegundos y offset desde GMT/UTC |
Es útil para mostrar campos de fecha y hora en una zona específica. | Es útil para almacenar una fecha en base de datos. |
Se ajusta para el horario de verano |
Podríamos decir que la diferencia más importante entre ZonedDateTime y OffsetDateTime es el guardado en BBDD. Una fecha en ambos formatos representa el mismo instante de tiempo, por lo que guardar en BBDD una fecha con información completa de la zona horario no tendría sentido y es por eso preferible guardar el OffsetDateTime.
Conclusión
En este artículo hemos visto las principales diferencias entre ZonedDateTime y OffsetDateTime, así como ejemplos y sus principales usos.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!