带时区偏移的 joda 日期时间,插入数据库后将更改为 UTC 时间

joda datetime with timezone offset, after insert to DB will change to UTC time

我现在正在使用 jodatime,但最近遇到了一个问题,即:当我得到一个 joda 时间(它总是带有时区偏移)时,说 2017-01-31T00:00:00.000+08:00,在我将这个值插入数据库之后(我使用 Hibernate4 作为我的 ORM 框架),该值将自动转换为 UTC 时间,即 1/30/2017 4:00:00 PM(我使用的是 IBM DB2,试过 MySql 也一样)。当我从数据库中检索它时,它会转换回 2017-01-31T00:00:00.000+08:00.

只是想知道为什么会这样?我可以对此进行一些全局配置吗?我想在数据库中存储本地时间而不是 UTC 时间(类似于 1/31/2017 0:00:00 AM),因此我需要更改数据库设置或在代码级别执行此操作?在这个时区处理方面真的没有太多经验,有人可以帮助我吗?谢谢!

经过几个小时的调查,我终于找到了这个问题的解决方案,因为我使用的是 Hibernate,我需要做的只是在 hibernate 配置中添加以下行 xml:

<property name="jadira.usertype.databaseZone">Asia/Singapore</property>
<property name="jadira.usertype.javaZone">Asia/Singapore</property>

或者:

<property name="jadira.usertype.databaseZone">jvm</property>
<property name="jadira.usertype.javaZone">jvm</property>

现在一切正常。