JPA 和 java 8 日期 API - 选择正确的实现(Instant、LocalDateTime、ZonedDateTime)

JPA and java 8 date API - choosing correct implementation (Instant, LocalDateTime, ZonedDateTime)

在以下情况下,java 8 次 API 类 中哪一个最适合 JPA 实体映射:

我见过的大多数示例都使用 LocalDateTime,但那个示例没有任何时区概念。由于我们所有的业务逻辑都应该在 UTC 中进行计算,而且 retrieve/store UTC 中的数据不会 InstantZonedDateTime 更合适?

在决定将哪种类型用于 JPA 实体映射时,应该考虑哪些实际影响(例如,无法将一周添加到 Instant)?

Instant 根据定义是 UTC,因此如果您总是处理 UTC,那么只要它具有您需要的所有操作就足够了。 LocalDateTime 是一个没有特定时区或时区偏移量的时间戳,但是如果您知道您只处理 UTC,那么它可能对它提供的操作很有用,而 Instant 没有。

最精确的类型可以携带明确的时区偏移量,允许您在 UTC 和其他时区之间来回转换时保留时间的时刻是 OffsetDateTime。有一个方便的 ZoneOffset.UTC 常量,您可以使用该常量将 UTC 的偏移量固定为 +0 小时。 ZonedDateTime 添加了 TimeZone 的概念,它增加了对夏令时等事物的支持,在处理 UTC 时通常不需要这个概念,除非您想在特定区域设置中显示本地时间.