UTC 到 EST SQL Server 2008

Posted

技术标签:

【中文标题】UTC 到 EST SQL Server 2008【英文标题】:UTC to EST SQL Server 2008 【发布时间】:2018-02-14 04:52:13 【问题描述】:

我们在 SQL Server 2008 中有数据,其中包含多个日期时间列。由于 SQL Server 中的日期格式是一个大整数值,即自 1970 年以来的秒数,我们使用DATEADD() 函数将其转换为实际的日期时间格式。但是我们面临的问题是,当我们使用 DATEADD() 时,我们获取的是 UTC 时区的数据,而我们想要的是 EST 中的数据。从那时起,我尝试简单地使用 -4 HR,但在 11 月至 3 月期间,我们领先 1 小时,因为当白天时间关闭时,差异为 5 小时。是否可以使用任何考虑夏令时的功能。任何帮助表示赞赏。

Current Function -> DATEADD(s, columnName, '01/01/1970 00:00:00')

问候,萨希尔

【问题讨论】:

没有任何原生的。这是非常困难的。多年来,夏令时的日期发生了变化。有些州不承认夏令时。甚至整个亚利桑那州都不承认夏令时。这只是美国的并发症。一旦你走出这些边界,它就会变得更加复杂。 有整个库是严格编写的,用于处理日期/时间(像 NodaTime、Momentjs 等),但我知道的不是 Sql Server,因为这通常是在应用层解决,而不是持久层。 您可以导入包装 TimeZoneInfo 类并从 Windows 注册表值中读取时区偏移量的程序集(与 Windows 相同)。当您应用 Windows 更新时,这些值会得到零星的更新。时区信息不仅会按计划(DST 或其他)进行更改,而且还会根据地区和国家/地区认为合适的情况临时更改。我会使用一个经过测试的库并将其导入 sql server。 【参考方案1】:

试试这个:

DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), columnName) 

【讨论】:

这仅在我们希望时间转换为当前时间时才有效——即当前是否为夏令时。我相信 OP 在一年中都有日期时间,需要根据字段的日期从 UTC 转换为 EST。【参考方案2】:

您可以为此使用我的SQL Server Time Zone Support 项目。它使用 IANA 标准时区名称,as listed here。

以您的示例为基础,以下代码首先从 UNIX 时间戳转换为基于 UTC 的 datetime,然后转换为美国东部时区的 datetime

SELECT Tzdb.UtcToLocal(DATEADD(s, columnName, '1970-01-01 00:00:00'), 'America/New_York')

【讨论】:

【参考方案3】:

我会编写一个与时间数据库(例如来自 worldtimeserver.com 的数据库)交互的 UDF——我不隶属于他们,并且通过快速的互联网搜索找到了它。

进一步的研究表明 timezonedb.com 拥有免费(如果非商业)会员资格,允许下载数据库并提供有关如何与 SQL Server 和 mysql 一起使用的示例。

【讨论】:

以上是关于UTC 到 EST SQL Server 2008的主要内容,如果未能解决你的问题,请参考以下文章

TSQL:如何将本地时间转换为 UTC? (SQL Server 2008)

如何将 Sql Server 2008 DateTimeOffset 转换为 DateTime

SQL Server 2008 R2 企业版/开发版/标准版(中英文下载,带序列号)

SQL Server 2008 函数将 GMT 时间转换为 AEST 并采用夏令时

如何将时间从 UTC 转换为 EST?

Talend 日期:将 EST 时间解析为 UTC