java 8 ZonedDateTime和OffsetDateTime有什么区别?

我已经阅读了文档,但是我仍然无法使用其中的一种:

  • OffsetDateTime
  • ZonedDateTime

根据文档OffsetDateTime应该用于写入数据库的date,但我不明白为什么。

javadocs这样说:

OffsetDateTime ,“ ZonedDateTime和“ Instant都在时间线上存储一个瞬间,精度达到纳秒级, Instant是最简单的,只需表示瞬间OffsetDateTime增加了UTC /格林威治时刻的偏移量,允许本地date时间ZonedDateTime添加了完整的时区规则。“

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

因此, OffsetDateTimeZonedDateTime之间的区别在于后者包括覆盖夏令时调整的规则。

在将date写入数据库时​​应该使用OffsetDateTime,但是我不明白为什么。

一个原因是具有本地时间偏移的date总是代表相同的时间点,因此具有稳定的顺序。 相比之下,具有全时区信息的date的含义在调整各个时区的规则时是不稳定的。 (而且这些确实发生了…)

如果(例如)在date字段上创build数据库索引,那么意思/sorting不稳定的date就会出现问题。