2015-05-14 5 views

risposta

99

I javadocs dicono questo:

"OffsetDateTime, ZonedDateTime e Instant tutte memorizzare un istante sul time-line per nanosecondo precisione Instant è il più semplice, è sufficiente che rappresenta l'istante OffsetDateTime aggiunge all'istante.. lo scostamento da UTC/Greenwich, che consente di ottenere la data ora locale. ZonedDateTime aggiunge le regole complete per il fuso orario. "

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

Così la differenza tra OffsetDateTime e ZonedDateTime è che quest'ultimo include le regole che riguardano il risparmio di luce del giorno regolazioni dell'ora.

OffsetDateTime deve essere utilizzato quando si scrive la data nel database, ma non capisco perché.

Un motivo è che le date con offset di ora locali rappresentano sempre gli stessi istanti nel tempo e pertanto hanno un ordine stabile. Al contrario, il significato di date con informazioni complete sul fuso orario è instabile a fronte di aggiustamenti delle regole per i rispettivi fusi orari. (E questi accadono ...)

Le date il cui significato/ordine è instabile sono problematici se (ad esempio) si crea un indice di database su un campo la data.

+4

"include le regole che coprono le regolazioni dell'ora legale" ... e altre anomalie. L'ora legale è solo una delle cause delle modifiche ai valori di data e ora. –

+17

In parole semplici: [Fuso orario] (https://en.wikipedia.org/wiki/Time_zone) = ([Offset-Da-UTC] (https://en.wikipedia.org/wiki/UTC_offset) + Regole- For-Anomalie) –