[英]Daylight saving changes affecting UTC conversion
基本上我將存儲在數據庫中的本地日期轉換為 UTC。 但是我在某處讀到夏令時規則在 2007 年發生了變化。 Date.ToUniversalTime() 函數仍然可以正常工作。 基本上 2007 年之前的日期(新規則生效時)將被正確轉換,但之后的日期則不會。 我在這里嗎? 或者.Net 會根據不同的夏令時規則在內部進行轉換嗎?
編輯:日期作為當地時間存儲在數據庫中。 我正在將其轉換為 UTC。 因此,諸如“2005 年 3 月 9 日”之類的日期應該使用 2005 年的日光規則而不是今天的規則進行轉換。 美國的規則在 2007 年發生了變化。所以日期出現了一個小時的錯誤。
這取決於您使用的.NET版本以及您正在使用的Windows版本。 .NET 3.5具有TimeZoneInfo類,其中包括歷史更改等 - 在此之前,不幸的是,支持更加不完整。
我希望ToUniversalTime()
能夠考慮到這一點。 您是否嘗試過使用DST更改之前和之后的日期檢查結果?
編輯
如果您知道數據庫中所有日期的時區偏移量,我明確建議您在表級別將它們轉換為UTC。 你擺脫了很多令人頭疼的問題。 轉換為本地時間以便顯示更容易。
這取決於信息在數據庫中的存儲方式。
希望數據庫中的數據包含UTC偏移量,如果是這樣,對夏令時規則的任何更改都將無關緊要。
如果UTC偏移量未知,則幾乎不可能知道如何將其轉換為UTC。 例如,如果時間存儲為沒有元數據的整數,則系統必須知道何時將其添加到數據庫以便能夠找出相應的UTC時間戳。
我不想這么說,但是你被搞砸了 。 在問題變得更糟之前,咬緊牙關並將數據庫中的日期更改為UTC。 如果您繼續嘗試在數據庫中存儲本地時間,您的代碼將成為特殊情況日期數學的噩夢。
妥協:將本地時間和UTC時間存儲在不同的列中; 至少那你會得到一個參考
看到這篇文章有更多的理由永遠不會在當地時間存儲db時間
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.