java - 尽管 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?
解决方案
所以在尝试了很多事情之后,它看起来像在做:
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 可以做任何事情。
推荐阅读
- laravel - laravel 请求文件返回 null(添加了 enctype)
- mysql - 我的 sql select 语句中的 case 语句
- android - 任务不在根项目中
- docker - Redis:创建服务器 TCP 侦听套接字 *:6379:无法绑定套接字,错误号:13
- linux - 我如何在 Linux 中拥有一份以上的工作
- c# - 在 UI 文本组件上显示控制台日志
- react-native-camera - RNcamera(react-native-camera)无法识别条形码时如何显示错误消息
- c - 使用 dlsym 从 libaio.so.1 中选择正确的 io_getevents 函数
- pytorch - Pytorch 0.4.0:在 CUDA 设备上创建张量的方法有三种。它们之间有什么区别吗?
- excel - 如何使用 VBA 中的单个按钮从不同的工作表中获取内容?