ZonedDateTime & OffsetDateTime

Hoy quiero compartirles algunas pruebas que realice con ZonedDateTime y OffsetDateTime.

En primer lugar podemos decir que tenemos un "Instant" que representa un instante determinado de tiempo, luego tenemos un OffsetDateTime que representa un instante de tiempo con el agregado de que este tiene un offset aplicado, luego tenemos un ZonedDateTime que es un instante de tiempo con un Offset aplicado y con reglas de TimeZone (ZoneRules) para las conversiones de horario de verano y otras particularidades de cada TimeZone.
Puede que tengan las dudas de cual debemos y cual no debemos usar ya que ambas son iguales a simple vista o parecidas pero a la realidad no lo son, por las particularidades ya mencione al principio.
Por lo general para guardar fechas en cualquier medio de almacenamiento debemos usar el OffsetDateTime ya que este no pierde información al momento de almacenarse, cosa que si pasa cuando usamos el ZonedDateTime, ya que se pierden las ZoneRules al momento de persistirse, por lo cual tenemos que tener en claro que el OffsetDateTime debemos usarlos en los modelos de persistencia y el ZonedDateTime cuando queremos realizar operaciones de complejas entre fechas ya que estas operaciones van a contemplar las reglas de cada TimeZone. Ahora si las operaciones son simples como determinar si una fecha es menor, igual o mayor podemos usar tranquilamente OffsetDateTime para este tipo de operaciones.



Resumiendo OffsetDateTime es para modelos de persistencia y ZonedDateTime para realizar operaciones con las fechas, y como ultimo comentario mencionar que podemos obtener un ZonedDateTime mediante un OffsetDateTime y viceversa.

Del paquete java.time tenemos:

Instant -> OffsetDateTime -> ZonedDateTime

Saludos a todos y Happy Haking } ;)

Comentarios

Entradas más populares de este blog

Migración MongoDb 2.4 -> 2.6 -> 3.0 (con replicas)

Niveles de visión de los datos