JPA和java 8 date API - 选择正确的实现(Instant,LocalDateTime,ZonedDateTime)

时间:2016-06-01 15:59:47

标签: jpa time java-8 java-time hibernate-5.x

在以下情况中,哪个可用的java 8时间API类最适合JPA实体映射:

  • 类型的信息创建的合同
  • 日期以UTC格式存储在数据库中
  • 业务逻辑以UTC
  • 进行所有计算
  • 日期显示在欧洲/维也纳时区的用户界面中

我见过的大多数示例都使用 LocalDateTime ,但是那个没有任何时区概念。由于我们所有的业务逻辑都应该用UTC进行计算,并且还要用UTC检索/存储数据,否则即时 ZonedDateTime 会更合适?

在决定使用哪种类型进行JPA实体映射时(例如,无法为Instant添加一周),应该考虑哪些实际意义?

1 个答案:

答案 0 :(得分:3)

根据定义,

Instant是UTC,因此,如果您始终处理UTC,只要它具有您需要的所有操作就足够了。 LocalDateTime是没有特定时区或区域偏移的时间戳,但如果您知道自己只处理UTC,则它对Instant没有提供的操作非常有用。

可以携带明确区域偏移的最精确类型,允许您在UTC和其他时区之间来回转换时保留时刻OffsetDateTime。有一个方便的ZoneOffset.UTC常量可用于修复UTC的+0小时的偏移量。 ZonedDateTime添加了TimeZone的概念,它增加了对夏令时等内容的支持,这是您在处理UTC时通常不需要的概念,除非您想要显示当地时间具体的地区。