UTC到EST SQL Server 2008中

问题描述:

我们在SQL Server 2008中的数据,与多个日期时间列。由于SQL Server中的日期格式是一个很大的整数值,即自1970年以来的秒数,我们使用DATEADD()功能,将其转换成实际的日期时间格式。但是我们面临的问题是,当我们使用DATEADD()时,我们得到UTC时区的数据,而我们希望在EST中获得数据。我想简单地使用-4从时间,但NOV期间HR - MAR我们领先1个HR,因为不同的是5小时夏时制时间处于关闭状态。是否有任何功能可以用于考虑夏令时。任何帮助表示赞赏。UTC到EST SQL Server 2008中

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

问候,萨赫勒

+4

有没有什么本地。这非常困难。夏令时的日期在过去几年中发生了变化。有些州不承认夏令时。即使亚利桑那州的整个州都不承认夏令时。这只是美国的复杂情况。一旦你走出这些边界就会变得更加复杂。 –

+0

有些整个库是严格为了处理日期/时间而编写的(*如NodaTime,Momentjs等*),但对于我所知的Sql Server而言,因为这通常是在应用程序层而不是持久层中解决的。 – Igor

+0

您可以导入一个包装TimeZoneInfo类的程序集,并从Windows注册表值中读取时区偏移量(与其相同的方式窗口)。这些值在您应用Windows更新时会发生零星更新。时区信息不仅根据预定的时间(DST或其他)而变化,而且随着地区和国家认为合适的临时基础变化。我会使用一个经过测试的库并将其导入到sql server中。 –

试试这个:

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

只有当我们希望时间转换处于当前时间时(即,如果当前是夏令时),这才起作用。我相信OP的日期大概是一年左右,需要根据现场日期从UTC转换为EST。 – erict

我会写如worldtimeserver.com之一,随着时间的数据库交互的UDF - 我不隶属于与他们并发现它与快速的互联网搜索。

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

你可以用我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')