MySQL 使用“GMT 8”时区运行,而 Tomcat 使用“GMT”。将 datetime 保存到数据库时,值可能看起来是正确的,但在检索时,会出现“GMT”值。此外,从数据库检索的值会转换为“GMT”,这表明数据库将它们视为“GMT 8”。
useTimezone 参数是一个过时的解决方法。对于现代解决方案,请设置 useLegacyDatetimeCode=false 并升级到最新的 mysql JDBC 连接器。连接 URL 示例:
jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false
如果 useLegacyDatetimeCode 设置为 false,则会调用 newSetTimestampInternal() 方法。如果提供的 Calendar 为空,则日期对象的格式为数据库时区:
this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss", Locale.US); this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ()); timestampString = this.tsdf.format(x);
要检索日期,请使用 getTimestamp(int) 而不使用 Calendar。同样,数据库时区将用于构建日期。
网络服务器的时区现在与格式无关。如果 useLegacyDatetimecode 保持 true,则使用 Web 服务器的时区,从而导致混乱。
例如,当设置为 EST 时,MySQL 可能会抱怨服务器时区模糊。要解决此问题,请在连接 URL 中指定准确的 EST 时区:
jdbc:mysql://localhost/mydb?useLegacyDatetimeCode=false&serverTimezone=America/New_York
仅当 MySQL 引发歧义问题时才需要这样做。
以上是Java连接MySQL数据库时如何正确处理时区?的详细内容。更多信息请关注PHP中文网其他相关文章!