首页 > 解决方案 > 尽管 UTC,Java / Hibernate Timestamp 仍受到夏令时的影响

问题描述

我正在从 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。timezone = 'UTC' (restarted service) 当我查询 postgres 时,我没有得到问题。此外,当我在 java 中手动设置日期然后递增时,我没有得到问题。

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

我也许可以做一些激烈的事情,比如在数据库中使用 char vs timestamp 所以休眠不会混淆,但这似乎很激烈,我一定错过了一些简单的东西吗?

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

标签: javapostgresqltimetimezonedst

解决方案


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

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 可以做任何事情。


推荐阅读