jodatime和hibernate支持更改时区

时间:2010-12-11 21:23:08

标签: hibernate timezone jodatime

我有一个持久化实体,其LocalTime字段映射到postgre表中的time without time zone列,我在我的应用程序中填充此字段,如下所示:

int hour = 10
int minutes = 12
MyEntity e = new MyEntity()
e.setTime(new LocalTime(hour, minutes) );

然后我使用hibernate将实体持久保存在db上,稍后在应用程序中我检索实体并显示时间字段,它正确显示10:12但是当我在表上看到值时(使用pg-admin ),它显示:04:12当它应该是10:12时,我的jvm和我的sistem中的时区是CST(这是UTC-6)它在我看来,无论是休眠还是jodatime我的某个地方插入数据库和检索值时,时间字段开始转换为我的时区,我是否正确?有什么方法可以防止这种行为吗?我使用jre 1.6.0_22,hibernate 3,joda-time 1.5.1和joda-time-hibernate 1.2

修改 忘了提到该字段是用hibernate映射的:

type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime"

1 个答案:

答案 0 :(得分:2)

嗯,它可能已过时,但是名为PersistentLocalTime的类的文档说明了这一点:

  

通过Hibernate将LocalTime持久化为SQL TIME数据类型 - 请注意,不会保留亚秒值。此类型基本上与org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime兼容。 但是,请注意,org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime包含一个错误,即由于使用了Time.setTime(long),写下来的时间将从GMT偏移。此类不受此问题的影响,但这意味着您不能依赖此类型的解释对两个类都相同。

(强调我的。)

听起来你遇到了这个问题,但使用PersistentLocalTime代替它会修复它。