我想确定夏令时是否有效,但是在与我的服务器所在位置不同的区域。
我的问题是我想检查伦敦的夏令时,我的服务器在加拿大;是否可以找到不同时区的夏令时?
答案 0 :(得分:5)
您需要部署DST表并查找所需区域的DST时间。 DST由各种组织发布并定期更新。您需要了解的是,DST无法通过算法确定,只能按照各个地区的各种立法机构设置,并经常更改。例如,这里是current 2013 DST table。保持应用程序的DST查找表最新是您应用程序的周期性任务。
答案 1 :(得分:0)
最好的办法是使用the two common Time Zone databases之一。
但是,似乎(根据this question)很难使用SQL Server中的Microsoft TimeZone数据库,因为TimeZoneInfo
类标有[HostProtection]
属性MayLeakOnAbort
1}}设置为真。
我认为可能的解决方案是使用NodaTime类。这些应该可以从SQL CLR访问,并提供对两个数据库的访问。
我会尝试这一点,并在完成时更新。
<强>更新强>
在与SQL CLR的安全限制作斗争之后,我得出结论,这种方法目前也不可能。
我目前的建议是在应用程序逻辑中在数据库之外进行时区转换。
答案 2 :(得分:0)
这是SQL Server的原始IsDST ......
CAST((DATEPART(month, DATEADD(week, -1, <DateTime>)) + 2) % 13 / 5 AS bit) AS IsDST
标准时间11月8日 - 3月7日收益率为0,白天时间3月8日 - 11月7日收益率为1。
答案 3 :(得分:-1)
在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