2013-11-14 28 views
1

我的數據庫的日期值以GMT格式保存在GMT時區中。我試圖將日期轉換爲當地時區,但是當日期是過去的日期時會出現問題,例如我的日期抵消日期爲2012年12月1日,日期爲-5,2010年6月15日爲-4夏令時。我目前在美國東部時間。GET UTC過去日期的日期

所以我需要知道什麼是上一個日期的UTC日期能夠確定-4或-5將是該日期的偏移量。

SELECT Test_Number, 
Last_Test_Date, dateAdd(hour, 
     datediff(hour, GETUTCDATE(), getdate()), --UTC offset 
     dateadd(second, Last_Test_Date, '1/1/1970 12:00 AM')) 
FROM TestTable 

我不完全確定它是否可能。有什麼意見?

+1

使用日曆表。您不能使用今天的偏移量來計算偏移量。以往。特別是由於每年的日期不同,實際的規則也會發生變化。例如,10年前夏令時結束時的抵消額與去年不同。 –

+0

如果您認真對待此問題,請不要依賴Windows運行時代碼。舊版本只支持每個時區的一組UTC時區,我認爲它仍然只支持最新版本中的兩種方式。 –

回答

1

這聽起來像是你實際上希望將存儲在數據庫中的UTC時間轉換爲具有正確偏移量(-5或-4)的本地日期/時間。

在SQL Server中沒有好辦法做到這一點。至少,還沒有。

我可以提供的最好的建議是不要在數據庫中進行轉換。而是將UTC值原樣傳遞迴您的應用程序代碼,並在那裏進行轉換。

例如,如果您的應用程序是用.NET編寫的,則可以使用TimeZoneInfoNoda Time來處理您希望的任何時區的轉換。如果您使用其他方式,請告訴我,我會更新問題。

+0

感謝馬特,我正在使用SSRS,不知道我們是否可以在那裏編寫任何代碼來動態處理日期和UTC時間。 – Nanu