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

为何SQL中大西洋标准时间的时区转换结果错误?

问题原因与解决方法

问题根源

你用的查询逻辑存在误区:DATEPART(tz, GETUTCDATE() AT Time Zone 'Atlantic Standard Time')返回的是该时区当前实际生效的偏移量,包含夏令时调整。大西洋标准时间对应的时区会在夏令时切换为大西洋夏令时,偏移从-04:00变为-03:00。你的示例时间2022-09-12正处于夏令时时段,所以取到的偏移是-180分钟(-3小时),加到UTC时间16:00上就得到了13:00,和实际输出一致。

正确的转换方法

要正确将UTC时间转换为指定时区的时间(自动处理夏令时),直接使用AT TIME ZONE的标准转换语法即可:

-- 标准写法:先标记UTC时区,再转换到目标时区
SELECT GETUTCDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Atlantic Standard Time' AS atlantic_ts

或者更简洁的写法(GETUTCDATE()本身就是UTC时间,可直接转换):

SELECT CAST(GETUTCDATE() AT TIME ZONE 'Atlantic Standard Time' AS DATETIME) AS atlantic_ts

用这个查询,2022-09-12 16:00:00.000的UTC时间会根据夏令时规则,正确返回13:00:00.000;如果是冬令时时段(比如12月),则自动返回12:00:00.000。

如果需求是强制使用标准时间偏移(-04:00),忽略夏令时,可手动固定偏移:

SELECT DATEADD(HOUR, -4, GETUTCDATE()) AS atlantic_standard_ts

但这种写法不会自动处理夏令时切换,仅适用于固定偏移的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:35:13