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
因此, OffsetDateTime
和ZonedDateTime
之间的区别在于后者包括覆盖夏令时调整的规则。
在将date写入数据库时应该使用OffsetDateTime,但是我不明白为什么。
一个原因是具有本地时间偏移的date总是代表相同的时间点,因此具有稳定的顺序。 相比之下,具有全时区信息的date的含义在调整各个时区的规则时是不稳定的。 (而且这些确实发生了…)
如果(例如)在date字段上创build数据库索引,那么意思/sorting不稳定的date就会出现问题。