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

Apps Script JDBC读取MySQL DATETIME字段出现8小时时区偏移如何解决

解决方案

你遇到的时区偏移问题是Google Apps Script内置MySQL JDBC驱动默认按服务器本地时区(UTC+8)解析DATETIME字段导致的,可通过以下两种方案修复,无需手动解析字符串:

方案1:JDBC连接参数指定时区

在JDBC连接URL末尾追加两个参数,强制驱动使用UTC时区解析时间类型:

// 修改连接URL,追加serverTimezone和useLegacyDatetimeCode参数
let conn = Jdbc.getConnection(`jdbc:mysql://${dbIp}/mydb?serverTimezone=UTC&useLegacyDatetimeCode=false`, { user: "myuser", password: dbPw })

参数说明:

  • serverTimezone=UTC:指定数据库服务端的时区为UTC,驱动会按照该时区解析DATETIME字符串
  • useLegacyDatetimeCode=false:关闭旧版时间处理逻辑,确保serverTimezone参数生效
    修改后再调用getTimestamp方法获取的时间戳就会和UNIX_TIMESTAMP返回的结果一致。

方案2:SQL直接返回时间戳绕开解析

完全绕开JDBC的时间类型解析逻辑,在查询时直接获取毫秒级时间戳:

SELECT UNIX_TIMESTAMP(COL) * 1000 AS col_unix_ts FROM MYTABLE WHERE OWNER_ID=1

查询后直接读取长整型数值构造Date对象即可:

const ts = res.getLong("col_unix_ts")
const correctDate = new Date(ts)

该方案不受JDBC驱动配置影响,稳定性更高。

之前尝试不生效的原因

你之前给getTimestamp传入时区参数不生效,是因为驱动在读取DATETIME字段时已经按照错误的时区完成了时间戳计算,后续传入的时区参数无法修正已经生成的错误时间戳;useJDBCCompliantTimeZoneShift参数仅适配旧版JDBC规范的时间偏移逻辑,对MySQL驱动的时区解析问题无效。


内容的提问来源于stack exchange,提问作者Alex O'Brien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:48:04