我需要将存储为UTC的日期时间转换为存储在另一列中的特定时区。
例如,给定此表:
Date | TimeZone -----------------+--------------- 2017-05-15 11:17 | Europe/Madrid 2017-01-01 11:17 | Europe/Madrid 2017-05-15 11:17 | US/Pacific 2017-01-01 11:17 | US/Pacific
我应该得到这个结果:
Date ---------------- 2017-05-15 13:17 2017-01-01 12:17 2017-05-15 04:17 2017-01-01 03:17
请注意我使用的是SQL Server 2012,因此我无法使用AT TIME ZONE
。有没有办法在没有后处理数据的情况下实现这一目标?
答案 0 :(得分:1)
不幸的是,这并不容易。您需要有关不同时区的信息以及日光开关等的规则。 我正在使用http://jsfiddle.net/RACCH/6sod2kb3/库来满足我所有与时区相关的需求。
SELECT LocalDate = Tzdb.UtcToLocal(UTCDate, TimeZone, 1, 1)
FROM Table
sqltz使用IANA时区数据库,Microsoft使用不同的标准,因此时区名称不同。欧洲/马德里和美国/太平洋地区位于IANA数据库