我自己遇到了这个。我看到的是,即使您已在日期中将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,
摩西
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)