TDengine JDBC设置UTC+8时区查询时间偏差16小时问题咨询
问题原因
TDengine JDBC驱动的时区参数遵循POSIX时区命名规范,和国内常用的GMT偏移表示规则的正负符号完全相反:
- 常规GMT表示逻辑下,
GMT+8代表东八区(北京时间所在时区,比UTC时间快8小时) - POSIX规范逻辑下,
UTC+8代表西八区(比UTC时间慢8小时),UTC-8才代表东八区(比UTC时间快8小时)
你配置的UTC+8实际生效为西八区,和你预期的东八区刚好相差16小时,所以会出现插入时间和查询结果差16小时的问题。你数据库中存储的时间戳本身是正确的,偏差完全来自于JDBC连接的时区解析规则不匹配。
UTC-8对应的区域
TDengine官方示例中的UTC-8就是POSIX规则下的东八区,对应区域包括中国全境、新加坡、马来西亚、菲律宾等国家和地区,就是我们日常使用的北京时间所在时区。
解决方案
如果你需要使用东八区作为JDBC连接的时区,直接将配置修改为以下内容即可:
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
内容的提问来源于stack exchange,提问作者Ray Shown
相关产品推荐
相关产品推荐

