我想,以确定是否夏令时处于活动状态,但到我的服务器位于不同的区域。
我的问题是我想看看伦敦的夏令时,我的服务器是在加拿大; 是有可能找到一个不同的时区夏令?
我想,以确定是否夏令时处于活动状态,但到我的服务器位于不同的区域。
我的问题是我想看看伦敦的夏令时,我的服务器是在加拿大; 是有可能找到一个不同的时区夏令?
你需要部署DST的表,查找了DST时间你想要的区域。 DST由各种组织公布,并定期更新。 什么,你需要明白的是,DST不能由一个算法来决定,它只能是由各种不同的区域立法机构,和变更将经常抬起头来。 例如这里是目前2013 DST表 。 维护应用程序的DST查表电流将是您的应用程序周期性任务。
做的最好的办法是使用一种两个共同的时区数据库 。
然而,似乎(根据这个问题 ),所以很难从SQL Server使用Microsoft区数据库,因为TimeZoneInfo
类标有[HostProtection]
与属性MayLeakOnAbort
设置为true。
我认为,一个可能的解决方案是使用NodaTime类来代替。 这些应该是从SQL CLR访问,并提供访问这两个数据库。
我会尝试了这一点,并更新这里的时候完成。
UPDATE
与SQL CLR的安全限制的战斗后,我断定这是方法是目前不可能无论是。
我现在的建议是做时区转换数据库之外,在应用程序中的逻辑。
下面是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日。
上的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