回答
您需要部署一個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