回答
您需要部署一个DST表并查找所需区域的DST时间。 DST由各个组织发布并定期更新。您需要了解的是,DST无法通过算法确定,只能按照各地区各立法机构的规定进行查找,并且频繁更改。例如,这里是current 2013 DST table。维护您的应用程序的DST查找表当前将是您的应用程序的定期任务。
在数据库中部署时区数据表通常不是一个好主意。它最终会成为您必须手动维护的工件,并且随着时间的推移,您会发现它不准确。 – 2013-04-26 16:07:00
我支持我的推荐 – 2013-04-27 12:33:44
@RemusRusanu您知道我们可以在哪里获得像2015年这样的特定年份的DST SQL脚本吗? – sqluser 2015-07-10 04:01:59
最好的办法是使用the two common Time Zone databases之一。
然而,似乎(据this question)是很难从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
这对加拿大可能有效(今年?),但DST从2015年3月29日开始在伦敦。 – Paolo 2015-01-30 19:39:17
上的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
我不知道为什么这是倒票。 OP没有要求任何时候知道DST的方法 - 这是无法提供的。也许数据源不可靠?这将是很高兴知道。表面看来,解决方案看起来可行。 – bielawski 2017-06-07 15:07:36
- 1. 夏令时的web服务
- 2. php时区服务器夏令时
- 3. 如何确定VBA中的夏令时?
- 4. Sql Server中的夏令时
- 5. 服务器上的ASP.NET时间转换(夏令时)
- 6. mysql夏令时 - 确定是否为真
- 7. 远程服务器命令执行
- 8. 确定夏令时是否激活? SQL Server
- 9. 夏威夷的夏令时
- 10. 远程文件的时区信息,夏令时
- 11. Codeigniter无法在远程服务器中正确重定向
- 12. SQL Server备份到远程服务器
- 13. SQL服务器远程访问
- 14. SQL Server不允许远程服务器
- 15. 连接到远程sql express服务器
- 16. Laravel 4到Microsoft SQL服务器远程
- 17. 远程连接到SQL服务器
- 18. 远程服务器
- 19. 远程服务器
- 20. 如何通过浏览器确定远程服务器的等待时间
- 21. SQL服务器登录错误远程服务器数据库
- 22. Powershell远程DIR命令输出到远程服务器
- 23. 多个SSH到远程服务器+多个远程命令
- 24. 如何确定远程Exchange服务器正在使用的DC?
- 25. 如何确定远程计算机上的服务器类型
- 26. 访问远程SQL服务器的特定计算机
- 27. mysqldump的远程服务器
- 28. 远程服务器的RequestDispatcher?
- 29. 在服务器上远程执行自定义命令c windows
- 30. 的Oracle SQL:处理与夏令时
指重复(无答案):http://stackoverflow.com/questions/6781121/determine-if-daylight-saving-time-is-积极-SQL服务器。简单的答案是没有内置任何东西.Windows使用存储在注册表中的“查找表”来处理DST,这些查询表通常无法从T-SQL访问。 – RichardTheKiwi 2013-04-26 08:29:19
@RichardTheKiwi - 此注册表中的数据是Microsoft时区数据库[请参阅此处](http://stackoverflow.com/tags/timezone/info),可通过.Net'TimeZoneInfo'类访问,该类可以是通过SQL CLR调用在SQL Server中使用。我将很快发布一个代码示例的答案。 – 2013-04-26 16:08:42
@RichardTheKiwi - 我想这不像我想的那么容易。它是数据的正确来源,但有一些问题。请参阅http:// stackoverflow。com/q/614600/634824 – 2013-04-26 16:16:14