You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDBC返回时间戳与系统UTC时区不符问题求助

数据库与容器UTC时区下时间戳偏差问题
  • 数据库默认时区已设为UTC,运行应用的Ubuntu容器时区同样配置为UTC,已通过Timezone.getDefault()验证这一点
  • 我当前处于CST时区,原本预期数据库时间与系统时间应保持±1小时的相近性
  • 但通过resultset.getTimestamp().getTime()获取数据库时间后,发现时间戳偏差极大,具体数据如下:
Database time: 1674680930000
System.currentTime(): 1674703050253
Calendar time: 1674703050255

排查与解决建议

  1. 确认数据库时间字段类型:检查存储时间的字段是TIMESTAMP还是DATETIME。TIMESTAMP会自动转换为UTC存储,而DATETIME是原时间存储。如果是DATETIME,写入时可能未按UTC转换,导致读取的时间戳错误。
  2. 配置JDBC连接时区:在JDBC连接串中添加serverTimezone=UTC参数,确保驱动与数据库时区一致,避免驱动自动用本地时区(CST)转换时间。
  3. 显式指定时区读取时间:不要直接调用getTimestamp(columnName),改用getTimestamp(columnName, Calendar.getInstance(TimeZone.getTimeZone("UTC")))强制按UTC读取时间,排除驱动默认时区的干扰。
  4. 核实数据库服务器时区:执行SQL语句SELECT @@global.time_zone, @@session.time_zone;,确认数据库全局和会话时区确实为UTC,避免配置与实际运行时区不符。

内容的提问来源于stack exchange,提问作者Displayname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:05:22