簡體   English   中英

影響 UTC 轉換的夏令時更改

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM