【问题标题】:Java Tomcat Application is Saving Timestamp to the Database in Wrong TimezoneJava Tomcat 应用程序将时间戳保存到错误时区的数据库中
【发布时间】:2019-08-26 17:51:14
【问题描述】:

在 Java Tomcat 应用程序中,我使用的是-Duser.timezone=Canada/Central。另外,我将服务器时区设置为Canada/Central。但是,当我使用LocalDateTime.now() 将时间戳保存到数据库时,UTC 时间戳将保存到数据库中。

有人知道出了什么问题吗?

  • 操作系统:亚马逊 Linux
  • 数据库:AWS RDS 中的 Mysql 8

谢谢。

【问题讨论】:

  • SQL列类型是TIMESTAMP吗?根据 MySQL 文档“MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 进行存储,然后从 UTC 转换回当前时区进行检索。[...] 只要时区设置保持不变,您就可以返回您存储的值相同。”
  • 是的,列类型是TIMESTAMP
  • 顺便说一句,不推荐使用时区 ID Canada/Central。您应该改用America/Winnipeg。参见例如List of tz database time zones
  • @Sadat - 你能贴出插入表格的代码,并从表格中读取值
  • 我基本上想在我配置的时区而不是 UTC 中将时间戳存储到数据库中。该代码涉及几个模块,我将尝试发布一个总结版本。谢谢。

标签: java mysql linux tomcat timezone


【解决方案1】:

我想,我找到了一个优雅的解决方案。

在jdbc连接字符串中,添加如下参数:

useLegacyDatetimeCode=false&serverTimezone=America/Winnipeg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2020-11-14
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多