您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Hibernate / JPA和JDK日期进行不需要的自动时区转换

使用Hibernate / JPA和JDK日期进行不需要的自动时区转换

我自己遇到了这个。我看到的是,即使您已在日期中将UTC指定为时区(并且可以通过打印出来并在末尾看到“ Z”来查看),但出于某种原因,JVM还是想接管并使用JVM的认时区为您转换日期。

无论如何,您需要一个自定义映射来解决此问题。尝试使用 Jadira

@Entity
@Table(name = "MY_TABLE")
public class MyTable implements Serializable {
  . . .
  @Column(name = "START_DATE")
  @Type(type="org.jadira.usertype.dateandtime.legacyjdk.PersistentDate")
  private Date startDate;
  public Date getStartDate() {
    return startDate;
  }
  public void setStartDate(Date startDate) {
    this.startDate = startDate;
  }
  . . .
}

认情况下,Jadira的PersistentDate类在将日期转换为要存储在数据库中的毫秒值时,使用UTC作为时区。您可以指定其他时区,但听起来像是要存储UTC。

就像您的帖子中的注释所暗示的那样,有时您用来查询数据库的工具正在为您进行愚蠢的自动(基于我的JDK认TZ的转换),使您相信该值仍然不正确。

您也可以尝试存储原始值(作为INTEGER),只是为了使自己确信已存储了正确的毫秒值。

HTH,

摩西

其他 2022/1/1 18:19:17 有493人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶