2015-05-14 3 views
82

Я прочитал документацию, но я до сих пор не могу получить, когда я должен использовать один или другой:В чем разница между java 8 ZonedDateTime и OffsetDateTime?

Согласно документации OffsetDateTime следует использовать при запись даты в базу данных, но я не понимаю почему.

+3

В основном 'ZonedDateTime' также содержит информацию о часовых поясах, включая переключения DST и т. Д. Из того, что я читал. – fge

ответ

99

В Javadocs сказать:

"OffsetDateTime, ZonedDateTime и Instant все хранить мгновение на линии времени наносекундных точности Instant является самым простым, просто представляя в тот момент, OffsetDateTime добавляет к моменту.. смещение от UTC/Greenwich, которое позволяет получить локальное время-дату. ZonedDateTime добавляет правила полных часовых поясов ».

Источник: https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html

Таким образом, разница между OffsetDateTime и ZonedDateTime в том, что последняя включает в себя правила, которые охватывают корректировки летнего времени.

OffsetDateTime следует использовать при записи даты в базу данных, но я не понимаю почему.

Одна из причин заключается в том, что даты с местными смещениями времени всегда представляют одни и те же моменты времени и, следовательно, имеют устойчивый порядок. Напротив, значение дат с полной информацией о часовом поясе неустойчиво перед лицом корректировки правил соответствующих временных зон. (И это происходит ...)

Даты, значение/порядок которых неустойчиво, являются проблематичными, если (например) вы создаете индекс базы данных в поле даты.

+4

"включает в себя правила, которые регулируют переход на летнее время" ... и другие аномалии. DST является лишь одной из причин корректировки значений даты и времени. –

+17

Проще говоря: [Часовой пояс] (https://en.wikipedia.org/wiki/Time_zone) = ([Offset-From-UTC] (https://en.wikipedia.org/wiki/UTC_offset) + Правила- Для-аномалий) –

Смежные вопросы