问题

我已经阅读了文档,但是当我应该使用其中一个时,我仍然无法获得:

  • OffsetDateTime
  • ZonedDateTime

根据文档OffsetDateTime,在将日期写入数据库时​​应该使用,但我不明白为什么。


#1 热门回答(121 赞)

javadocs说:

"OffsetDateTime,ZonedDateTime和Instant都会在时间线上存储一个纳秒精度的瞬间。即时是最简单的,只是代表瞬间.OffsetDateTime增加了从UTC / Greenwich的偏移瞬间,允许本地日期时间到获得.ZonedDateTime增加了完整的时区规则。"

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

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

将日期写入数据库时​​应使用OffsetDateTime,但我不明白为什么。

一个原因是具有局部时间偏移的日期总是代表相同的时刻,因此具有稳定的排序。相比之下,面对对各个时区的规则的调整,具有全时区信息的日期的含义是不稳定的。 (这些确实发生了......)

如果(例如)在日期的字段上创建数据库索引,则其含义/排序不稳定的日期会出现问题。


原文链接