确定SQL Server远程夏令时(Determining remote daylight savi

2019-09-01 05:04发布

我想,以确定是否夏令时处于活动状态,但到我的服务器位于不同的区域。

我的问题是我想看看伦敦的夏令时,我的服务器是在加拿大; 是有可能找到一个不同的时区夏令?

Answer 1:

你需要部署DST的表,查找了DST时间你想要的区域。 DST由各种组织公布,并定期更新。 什么,你需要明白的是,DST不能由一个算法来决定,它只能是由各种不同的区域立法机构,和变更将经常抬起头来。 例如这里是目前2013 DST表 。 维护应用程序的DST查表电流将是您的应用程序周期性任务。



Answer 2:

做的最好的办法是使用一种两个共同的时区数据库 。

然而,似乎(根据这个问题 ),所以很难从SQL Server使用Microsoft区数据库,因为TimeZoneInfo类标有[HostProtection]与属性MayLeakOnAbort设置为true。

我认为,一个可能的解决方案是使用NodaTime类来代替。 这些应该是从SQL CLR访问,并提供访问这两个数据库。

我会尝试了这一点,并更新这里的时候完成。

UPDATE

与SQL CLR的安全限制的战斗后,我断定这是方法是目前不可能无论是。

我现在的建议是做时区转换数据库之外,在应用程序中的逻辑。



Answer 3:

下面是SQL Server中的粗IsDST ...

CAST((DATEPART(month, DATEADD(week, -1, <DateTime>)) + 2) % 13 / 5 AS bit) AS IsDST

产量0标准时间11月8日至三月七日,和1夏令时间3月8日至11月7日。



Answer 4:

上的SQL Server 2016

随着sys.time_zone_info现在你可以,如果一个特定的时区目前在DST查询。

select * from sys.time_zone_info

这里有一个例子结果

name                    current_utc_offset    is_currently_dst
Aleutian Standard Time  -09:00                1
Hawaiian Standard Time  -10:00                0
Marquesas Standard Time -09:30                0
Alaskan Standard Time   -08:00                1


文章来源: Determining remote daylight saving in sql server