将 UTC 中的 SQL Server 日期时间转换为特定时区
Posted
技术标签:
【中文标题】将 UTC 中的 SQL Server 日期时间转换为特定时区【英文标题】:Convert SQL Server datetime in UTC to specific timezone 【发布时间】:2017-06-01 11:35:49 【问题描述】:我需要将存储为 UTC 的日期时间转换为特定时区,存储在另一列中。
例如,给定这张表:
日期 |时区 -----------------+--------------- 2017-05-15 11:17 |欧洲/马德里 2017-01-01 11:17 |欧洲/马德里 2017-05-15 11:17 |美国/太平洋 2017-01-01 11:17 |美国/太平洋我应该得到这个结果:
日期 ---------------- 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
。有什么方法可以在不对数据进行后处理的情况下实现这一点?
【问题讨论】:
How does one use TimeZoneInfo in a SQLCLR assembly in SQL Server 2012 的可能重复项。答案包含一个项目链接,该项目将为 SQL Server 2008 R2+ 添加 TZ 支持。 Use SQL 2012 Server to convert UTC time to base local time的可能重复 【参考方案1】:不幸的是,这并不容易。您需要有关不同时区和夏令时切换规则等的信息。 我正在使用sqltz 库来满足我所有与时区相关的需求。
SELECT LocalDate = Tzdb.UtcToLocal(UTCDate, TimeZone, 1, 1)
FROM Table
sqltz 使用 IANA 时区数据库,Microsoft 使用不同的标准,因此时区名称不同。欧洲/马德里和美国/太平洋在 IANA 数据库中
【讨论】:
以上是关于将 UTC 中的 SQL Server 日期时间转换为特定时区的主要内容,如果未能解决你的问题,请参考以下文章
使用哪种 SQL Server sql 数据类型来保留 UTC 日期时间