2015-05-14 100 views

回答

99

的Javadoc这样说:

OffsetDateTimeZonedDateTimeInstant所有存储在时间线瞬间纳秒的精度Instant是最简单的,只是代表即时OffsetDateTime增加了瞬间。与UTC /格林威治的偏差,可以获得当地的日期时间,ZonedDateTime增加了完整的时区规则。“

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

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

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

其中一个原因是具有本地时间偏移的日期始终代表相同的时间点,因此具有稳定的顺序。相比之下,具有全时区信息的日期的含义在调整各个时区的规则时是不稳定的。 (并且这些确实发生...)

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

+4

“包含涵盖夏令时调整的规则”......以及其他异常情况。 DST只是调整日期时间值的一个原因。 –

+17

简单地说:[时区](https://en.wikipedia.org/wiki/Time_zone)=([Offset-From-UTC](https://en.wikipedia.org/wiki/UTC_offset)+ Rules- For-Anomalies) –

相关问题