5

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

我的问题是我想检查伦敦的夏令时,而我的服务器在加拿大;是否可以找到不同时区的夏令时?

4

4 回答 4

5

您需要部署 DST 表并查找所需区域的 DST 时间。DST 由各种组织发布并定期更新。你需要明白的是,夏令时不是算法确定的,只能按照各个地区的立法机构的规定查,而且变化频繁。例如这里是当前的 2013 DST 表。将应用程序的 DST 查找表保持在当前状态将是您的应用程序的一项定期任务。

于 2013-04-26T08:58:55.873 回答
0

最好的办法是使用两个常见的时区数据库之一。

但是,似乎(根据这个问题)很难使用 SQL Server 中的 Microsoft TimeZone 数据库,因为TimeZoneInfo该类标记有一个设置为 true的[HostProtection]属性。MayLeakOnAbort

我相信一个可能的解决方案是使用NodaTime类。这些应该可以从 SQL CLR 访问,并提供对这两个数据库的访问。

我会试试这个,完成后在这里更新。

更新

在与 SQL CLR 的安全限制作斗争后,我得出结论,这种方法目前也不可行。

我目前的建议是在您的应用程序逻辑中在数据库之外进行时区转换。

于 2013-04-26T16:34:02.230 回答
0

这是 SQL Server 的粗略 IsDST……</p>

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

标准时间 11 月 8 日至 3 月 7 日的产量为 0,日光时间 3 月 8 日至 11 月 7 日的产量为 1。

于 2015-01-30T17:58:30.693 回答
0

在 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
于 2017-05-22T19:12:27.523 回答