【问题标题】:Java / Hibernate Timestamp being affected by daylight savings despite UTC尽管 UTC,Java / Hibernate Timestamp 仍受到夏令时的影响
【发布时间】:2021-08-25 16:57:50
【问题描述】:

我正在从 Postgres 查询到 Java。

我已将 Postgres 和 Java 都设置为使用 'UTC'。

但是,当我出于某种原因进行查询时,日期会受到夏令时跳跃的影响。

我将休眠设置为 UTC。 (pom.xml)。

<properties>
    <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
    <property name="hibernate.jdbc.time_zone" value="UTC"/>
</properties>

我的 postgres 时区设置为 UTC。 时区 = 'UTC'(重新启动的服务) 当我查询 postgres 时,我没有得到问题。 此外,当我在 java 中手动设置日期然后递增时,我没有得到问题。

似乎只有当我出于某种原因查询和使用休眠时,它才会在一段时间内“忽略”UTC并跳过一小时。

我也许能够做一些激烈的事情,比如在数据库中使用 char 与时间戳,所以休眠不会混淆,但这似乎很激烈,我一定错过了一些简单的事情?

更新:因此,将所有逻辑移至存储过程并在那里执行解决了问题。我什至会说这可能是休眠的一个错误。我已将它设置为休眠以使用应该排除时区的 UTC?

【问题讨论】:

  • 不幸的是,一些工具和中间件喜欢对从数据库中检索到的值应用时区。 Postgres 仅在 UTC 中存储 TIMESTAMP WITH TIME ZONE,始终为 UTC。

标签: java postgresql time timezone dst


【解决方案1】:

所以在尝试了很多事情之后,它看起来像在做:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

像一些 SO 线程建议的那样工作

但是这样做:

<properties>
    <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
    <property name="hibernate.jdbc.time_zone" value="UTC"/>
</properties>

什么都不做。我已经看到许多 SO 线程暗示 JVM 中的属性更改,但根据我的经验,只有 TimeZone.setDefault 可以做任何事情。

【讨论】:

    猜你喜欢
    • 2010-09-18
    • 2013-06-27
    • 2012-05-01
    • 1970-01-01
    • 2018-11-02
    • 2013-02-22
    • 2020-01-13
    • 2016-02-06
    • 2010-11-18
    相关资源
    最近更新 更多