使用本地时区存储的日期 - Hibernate JPA

时间:2012-01-19 16:39:22

标签: hibernate date jpa timezone

我已经看到了许多与我所遇到的问题相关的线程,但我无法找到解决我的问题的方法,

我在Date类型的实体中有一个属性。它的定义就像这样,

@Column(name="CREATION_DATETIME")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDateTime

当我打印日期值时,它在本地时区,这是可以接受的,因为Date中的toString()使用默认时区;这将是程序运行的时区。当存储在数据库中时,它存储本地时区值;但我希望它存储原始值而不进行任何时区转换。 Hibernate在这里处理持久性。为什么会发生这种情况,如何解决?

在此处显示示例以使我的问题清楚,日期2011-11-30T19:02:00 + 0000存储为30-NOV-11 01.02.00.000000000 PM。当地时区是CST,因此它会执行-0600并存储它。

感谢 桑杰

1 个答案:

答案 0 :(得分:0)

如果您使用Hibernate映射Date对象,它将存储在中,而不是时区。事实上,Date代表一个时刻,时区是无关紧要的,不存储。

从数据库读回日期后,您可以使用Calendar类将其转换为您想要的任何时区,但数据库中的原始日期基本上是UNIX时间(1970年代的秒数/毫秒数) )。

另见: