我正在移植現有應用程序以在Windows Azure上運行。我們當前的解決方案嚴重依賴Windows在SQL Server上設置的時區。我們在我們的存儲過程和視圖中使用GETDATE()
的頻率很高。問題在於SQL Azure使用UTC時區運行。我試圖用一個方法調用替換GETDATE()
方法調用,該方法調用將根據數據庫中的時區應該是什麼設置來獲取時間。我遇到的問題是夏令時。有沒有人用SQL編寫過一個方法,可以返回當前的日期/時間並正確調整DST?SQL Server中特定時區的本地時間
我猜我會得到一些答案,會說我應該全面使用UTC時間。由於我不想解釋的原因,這似乎不是一種選擇。
任何幫助/建議,你可以給我將不勝感激。謝謝。
你是對的,你應該使用UTC。轉換到DST是後方的痛苦,並且記住幾年前DST進入和退出的規則發生了變化。你可以寫一個udf做轉換,但這將是一個昂貴的操作。 – 2012-04-20 20:28:21
DST是相當痛苦的。在以前的生活中,我使用了日曆表,因爲用戶有不同的時區偏好,不同的時區可能會受到DST的影響,也可能不會受到DST的影響,並且肯定遵循不同的時間表。因此,用戶將其時區指定爲首選項,當他們從現在開始計劃了6個月的事件時,我們根據日曆表中的查找存儲了UTC時間 - 我們匹配日期和時區,因此知道如何抵消。 – 2012-04-20 20:42:40
它會*很高興聽到你想使用當地時間的理由。 *有*我知道的一些,但它們相對較少。看看相關的SO問題和http://blogs.msdn.com/b/sqlprogrammability/archive/2008/03/18/using-time-zone-data-in-sql-server-2008.aspx我懷疑你是不會發現這是一件容易的事。它確實需要在T-SQL本身內嗎?您無法將該值作爲參數傳遞給您的存儲過程? – 2012-04-20 20:43:15