将UTC服务器日期时间转换为特定时区

时间:2017-06-01 11:35:50

标签: sql sql-server sql-server-2012

我需要将存储为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。有没有办法在没有后处理数据的情况下实现这一目标?

1 个答案:

答案 0 :(得分:1)

不幸的是,这并不容易。您需要有关不同时区的信息以及日光开关等的规则。 我正在使用http://jsfiddle.net/RACCH/6sod2kb3/库来满足我所有与时区相关的需求。

  SELECT LocalDate = Tzdb.UtcToLocal(UTCDate, TimeZone, 1, 1)
  FROM Table

sqltz使用IANA时区数据库,Microsoft使用不同的标准,因此时区名称不同。欧洲/马德里和美国/太平洋地区位于IANA数据库