Web应用程序使用Hades JPA和Hibernate来编写和读取数据库。表有两列类型为timestamp的列,名为CREATED和MODIFIED。 Web应用程序使用joda DateTime获取java.util.Date对象并将其写入DB。第一次创建条目时,情况很好,两个字段都在GMT中设置了时间。但是一旦这一行被更新,MODIFIED列就会在PST中设置。
在创建期间和修改期间执行相同的代码部分以设置日期值(它尝试从joda DateTime获取java.util.Date,如上所述)。
有人可以解释这种行为吗?
我注意到的另一件事是在上面的设置中,如果在Web应用程序中我使用新的Date()设置日期列,则将其设置为PST。当应用程序和数据库都在设置为GMT的计算机上运行时,我无法将时区作为PST。
编辑:TimeZone.getDefault()在两台机器上打印GMT。
答案 0 :(得分:2)
通过调用java.util.TimeZone.getDefault()
来检查JVM认为它正在运行的时区。这将是它从jdbc驱动程序读取时应用于Date的时区。虽然我已经使用了hibernate,但我不确定它在时区上的可配置性。不过,我会说它是在呼唤java.sql.ResultSet.getDate()
。此函数具有重载getDate(String columnLabel, Calendar cal)
,允许您指定从数据库读取的列的时区。这可能是问题的根本原因。如果Hibernate正在调用默认值getDate(String columnLabel)
,那么很可能问题是你的JVM认为它所在的时区不是GMT。