JPA 和 java 8 日期 API - 选择正确的实现(Instant、LocalDateTime、ZonedDateTime)
JPA and java 8 date API - choosing correct implementation (Instant, LocalDateTime, ZonedDateTime)
在以下情况下,java 8 次 API 类 中哪一个最适合 JPA 实体映射:
- 合同创建于信息类型
- 日期以 UTC 格式存储在数据库中
- 业务逻辑以 UTC 进行所有计算
- 日期显示在 Europe/Vienna 时区 UI
我见过的大多数示例都使用 LocalDateTime,但那个示例没有任何时区概念。由于我们所有的业务逻辑都应该在 UTC 中进行计算,而且 retrieve/store UTC 中的数据不会 Instant 或 ZonedDateTime 更合适?
在决定将哪种类型用于 JPA 实体映射时,应该考虑哪些实际影响(例如,无法将一周添加到 Instant)?
Instant
根据定义是 UTC,因此如果您总是处理 UTC,那么只要它具有您需要的所有操作就足够了。 LocalDateTime
是一个没有特定时区或时区偏移量的时间戳,但是如果您知道您只处理 UTC,那么它可能对它提供的操作很有用,而 Instant
没有。
最精确的类型可以携带明确的时区偏移量,允许您在 UTC 和其他时区之间来回转换时保留时间的时刻是 OffsetDateTime
。有一个方便的 ZoneOffset.UTC
常量,您可以使用该常量将 UTC 的偏移量固定为 +0 小时。 ZonedDateTime
添加了 TimeZone
的概念,它增加了对夏令时等事物的支持,在处理 UTC 时通常不需要这个概念,除非您想在特定区域设置中显示本地时间.
在以下情况下,java 8 次 API 类 中哪一个最适合 JPA 实体映射:
- 合同创建于信息类型
- 日期以 UTC 格式存储在数据库中
- 业务逻辑以 UTC 进行所有计算
- 日期显示在 Europe/Vienna 时区 UI
我见过的大多数示例都使用 LocalDateTime,但那个示例没有任何时区概念。由于我们所有的业务逻辑都应该在 UTC 中进行计算,而且 retrieve/store UTC 中的数据不会 Instant 或 ZonedDateTime 更合适?
在决定将哪种类型用于 JPA 实体映射时,应该考虑哪些实际影响(例如,无法将一周添加到 Instant)?
Instant
根据定义是 UTC,因此如果您总是处理 UTC,那么只要它具有您需要的所有操作就足够了。 LocalDateTime
是一个没有特定时区或时区偏移量的时间戳,但是如果您知道您只处理 UTC,那么它可能对它提供的操作很有用,而 Instant
没有。
最精确的类型可以携带明确的时区偏移量,允许您在 UTC 和其他时区之间来回转换时保留时间的时刻是 OffsetDateTime
。有一个方便的 ZoneOffset.UTC
常量,您可以使用该常量将 UTC 的偏移量固定为 +0 小时。 ZonedDateTime
添加了 TimeZone
的概念,它增加了对夏令时等事物的支持,在处理 UTC 时通常不需要这个概念,除非您想在特定区域设置中显示本地时间.