2017-06-01 64 views
0

我需要将存储为UTC的日期时间转换为存储在另一列中的特定时区。将UTC中的SQL Server日期时间转换为特定的时区

例如,假设此表:

 
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。有没有办法实现这一点,而无需后处理数据?

+4

可能重复[如何在SQL Server 2012的SQLCLR程序集中使用TimeZoneInfo](https://stackoverflow.com/questions/17581510/how-does-one -use-的TimeZoneInfo-IN-A-SQLCLR组装式-SQL服务器-2012)。答案包含一个链接,指向将向SQL Server 2008 R2 +添加TZ支持的项目。 –

+1

[使用SQL 2012 Server将UTC时间转换为基准本地时间]的可能重复(https://stackoverflow.com/questions/12452430/use-sql-2012-server-to-convert-utc-time-to-base -当地时间) –

回答

1

不幸的是,这并不容易。您需要关于不同时区和日光节约开关规则等信息。 我使用sqltz库来满足我所有与时区有关的需求。

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

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

相关问题