Quelle est la différence entre java 8 ZonedDateTime et OffsetDateTime?

j'ai lu la documentation, mais je ne vois toujours pas quand je devrais utiliser l'une ou l'autre:

Selon la documentation OffsetDateTime doit être utilisé lors de l'écriture de la date de la base de données, mais je ne comprends pas pourquoi.

98
demandé sur Basil Bourque 2015-05-14 13:08:40

1 réponses

les javadocs disent ceci:

" OffsetDateTime , ZonedDateTime et Instant tout stocker un instant sur la time-line à la précision nanoseconde. Instant est le plus simple, représentant simplement l'instant. OffsetDateTime ajoute à l'instant le décalage de UTC/Greenwich, ce qui permet d'obtenir la date-heure locale. ZonedDateTime ajoute des règles de fuseaux horaires."

Source: https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html

ainsi, la différence entre OffsetDateTime et ZonedDateTime est que cette dernière inclut les règles qui couvrent les ajustements d'heure d'été.

OffsetDateTime devrait être utilisé lors de l'écriture de date à la base de données, mais je ne comprends pas pourquoi.

une raison est que les dates avec des décalages d'heure locale toujours représentent les mêmes instants dans le temps, et ont donc un ordre stable. En revanche, la signification des dates avec des informations de fuseau horaire à plein temps est instable face aux ajustements des règles pour les fuseaux horaires respectifs. (Et elles ne se produisent...)

Dates dont le sens / l'ordre est instable sont problématiques si (par exemple) vous créez un index de base de données sur un champ la date.

124
répondu Stephen C 2016-02-15 15:39:40