В Javadocs сказать:
"OffsetDateTime
, ZonedDateTime
и Instant
все хранить мгновение на линии времени наносекундных точности Instant
является самым простым, просто представляя в тот момент, OffsetDateTime
добавляет к моменту.. смещение от UTC/Greenwich, которое позволяет получить локальное время-дату. ZonedDateTime
добавляет правила полных часовых поясов ».
Источник: https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html
Таким образом, разница между OffsetDateTime
и ZonedDateTime
в том, что последняя включает в себя правила, которые охватывают корректировки летнего времени.
OffsetDateTime следует использовать при записи даты в базу данных, но я не понимаю почему.
Одна из причин заключается в том, что даты с местными смещениями времени всегда представляют одни и те же моменты времени и, следовательно, имеют устойчивый порядок. Напротив, значение дат с полной информацией о часовом поясе неустойчиво перед лицом корректировки правил соответствующих временных зон. (И это происходит ...)
Даты, значение/порядок которых неустойчиво, являются проблематичными, если (например) вы создаете индекс базы данных в поле даты.
В основном 'ZonedDateTime' также содержит информацию о часовых поясах, включая переключения DST и т. Д. Из того, что я читал. – fge