我有一個關於DateTimeOffset和夏令時的問題。爲了解釋我的問題讓我們假設現在的日期和時間爲:夏令時後顯示DateTimeOffset顯示
11/6/2010 10:15:00 AM
如果我運行此代碼:
DateTimeOffset myTime = DateTimeOffset.Now;
Console.WriteLine("Local time: " + myTime.ToLocalTime().DateTime);
然後我得到這樣的結果:
當地時間: 11/6/2010 10:15:00 AM
這意味着事件發生在早上10點15分(我的時區是山區夏令時(-6偏移))。
那麼,我將這個DateTimeOffset保存到我的SQL Server 2008數據庫(作爲DateTimeOffset)。第二天我想把它展示給用戶。但是現在夏令時已過期。
如果我用保存的關閉值(從前一天)運行上面的WriteLine,會顯示什麼?
存儲在數據庫中的偏移量是-6。但是現在夏令時已經結束,目前的偏移量爲-7。因此,據我瞭解documentation,它會首先將我的時間轉換爲UTC時間(因此需要上午10:15並增加6個小時(4:15 pm),然後減去當地時間的當前偏移量(4:15下午 - 7 = 9:15 AM)
所以,如果我我的數學是正確的,現在當我展示我的情況下,它會顯示它在上午9:15發生,而不是10:15 AM
。這並不好,我想存儲時區信息,但我需要我的時間在同一時區保持靜態(意思是說,如果事件發生在猶他州上午10:15,那麼下一次我看它(在猶他州),我需要看到它是在上午10點15分,無論夏令時是否發生變化。
我不認爲我是第一個有這個問題。別人做了什麼來解決這個問題? (或我的事實錯了嗎?)
同意 - 只要你跟蹤時區,存儲DateTimeOffset對象不會給你買太多東西。只需使用UTC並存儲時區標識符即可。 – Doug