【问题标题】:joda datetime with timezone offset, after insert to DB will change to UTC time带有时区偏移的joda datetime,插入数据库后将更改为UTC时间
【发布时间】:2017-06-01 03:00:19
【问题描述】:

我现在正在使用 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),所以我需要更改数据库设置或在代码级别进行操作?在这个时区处理方面真的没有太多经验,有人可以帮助我吗?谢谢!

【问题讨论】:

  • 您要“配置”什么?你不喜欢做什么?
  • 我只是想我可以做一些一次性配置来解决这个问题,我不喜欢对每个 DateTime 对象进行操作。
  • 你还没有解释出了什么问题。特别是,您确实应该在内部使用 UTC,尤其是在数据库中。

标签: java datetime timezone jodatime


【解决方案1】:

经过几个小时的调查,我终于找到了这个问题的解决方案,因为我使用的是 Hibernate,我需要做的就是在 hibernate config 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>

现在一切正常。

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多