SQL时区/ DST问题

时间:2019-04-19 18:12:49

标签: tsql

我在SQL中有一个“时间”列,该列存储在“东部标准时间”中。我正在尝试将时间转换为UTC。我有时会计算DST,有时却无法计算。

以下面的代码为例:

DECLARE @Temp TABLE (T TIME);
INSERT INTO @Temp (T) VALUES ('15:00');
SELECT T, 
GETDATE() AT TIME ZONE 'Eastern Standard Time', 
CAST(T AS DATETIME) AT TIME ZONE 'Eastern Standard Time' 
FROM @Temp

此查询的结果是:

15:00:00.0000000    
2019-04-19 18:08:14.090 -04:00    
1900-01-01 15:00:00.000 -05:00

所以问题是,如果两个时间都是“东部标准时间”,为什么一个日期的偏移量为-04:00(正确),而另一个日期的偏移量为-05:00(仅当我们在不在DST上

1 个答案:

答案 0 :(得分:0)

问题在于,当将TIME数据类型转换为日期时间时,其日期为1/1/1900,该日期合法地位于-05:00偏移量中。为解决此问题,我将当前日期添加到TIME,现在一切正常。

CAST(T AS DateTime) + CAST(CAST(GETDATE() AS DATE) AS DateTime) AT TIME ZONE 'Eastern Standard Time'