我使用DateTime
在我的服务器上以UTC-Time存储时间戳:
// @Entity ..
@NotNull
@Column(name="DATE")
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime date;
在服务器启动过程中,我会这样做:
DateTimeZone.setDefault(DateTimeZone.UTC);
为了确保new DateTime()
总是在UTC时间,我是如何准备一个日期来存储的:
DateTime utc = new DateTime();
utc = utc.dayOfMonth().roundFloorCopy();
DateTime thisMonday = utc.withDayOfWeek(DateTimeConstants.MONDAY);
DateTime thisTuesday = thisMonday.plusDays(1);
如果我正在调试这个程序,我会看到。
2015-08-31 00:00:00
和2015-09-01 00:00:00
但是当我查看数据库时,我发现
2015-08-31 02:00:00
和2015-09-01 02:00:00
被储存在那里。是+2h,这是我当地的UTC偏移量(柏林/维也纳)。
为什么会发生这种情况,我如何确保我的服务器一直存储在UTC中?
发布于 2015-09-08 19:27:10
您正在使用Jadira将JodaTime类型转换为SQL /time类型。使用这些JPA/Hibernate属性告诉Jadira在向DB发送数据时应该应用哪个时区
<properties>
<property name="jadira.usertype.javaZone" value="UTC" /> <!-- or "jvm" to use your default JVM TZ, explicit Europe/Berlin or +02:00 etc. -->
<property name="jadira.usertype.databaseZone" value="UTC" /> <!-- or "jvm" to use your default JVM TZ or +02:00 etc. But you'd better not use an explicit TZ with a DST change -->
</properties>
详情请参见Jadira用户指南。
另一件事是,也许您的DB正在使用连接信息来显示时区中的时间戳?这取决于它是哪个DB,以及用于连接的工具。SQL Developer (对于Oracle DB)知道计算机的TZ,并将连接TZ设置为TZ。
https://stackoverflow.com/questions/32381914
复制相似问题