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

Java应用存储LocalDate、LocalTime到MySQL时出现1小时偏差问题

问题原因分析
  • 核心问题出在Hibernate配置的JDBC连接参数serverTimezone=GMT与你存入的本地时间所属时区不匹配。
  • 你代码中生成的LocalDate、LocalTime是欧洲/伦敦时区的本地时间,本身不携带时区信息。MySQL Connector/J 驱动在写入这类无时区的时间类型时,会按照连接参数指定的serverTimezone做时区转换:2021年10月9日英国仍处于夏令时阶段,欧洲/伦敦时区偏移为GMT+1,你传入的伦敦当地00:00会被驱动按照GMT时区的转换规则转为GMT时间的23:00后存入数据库,就出现了1小时的差值。
  • 你排查的MySQL服务端时区、Linux系统时区均不影响JDBC层的转换逻辑,该转换是驱动基于连接参数和JVM上下文完成的。
修复方案
  • 方案一:修改JDBC连接的serverTimezone参数与你生成本地时间的时区保持一致,将连接url中的serverTimezone=GMT改为serverTimezone=Europe/London即可。
  • 方案二:调整数据存储结构,不再拆分存储LocalDate和LocalTime,直接存储Instant或者带时区的完整时间类型到数据库的TIMESTAMP字段,从根源上避免时区转换导致的数值偏差。
  • 方案三:如果必须保留现有存储结构,可以在JDBC连接参数中追加useLegacyDatetimeCode=false,明确关闭旧版时间处理逻辑,同时保证serverTimezone与业务使用的时区匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:24:04