一千萬個為什麽

搜索

安全地將UTC日期時間轉換為當地時間(基於TZ)進行計算?

以下是上一個問題 @Jon Skeet 給了我很多幫助(再次感謝!)

我現在想知道當他們被轉換回本地日期/時間時,我如何安全使用以UTC格式存儲的日期/時間。

正如Jon在上一個問題中指出的那樣,使用 DateTimeOffset 及時表示 instant ,並且沒有辦法預測一分鐘之後當地時間會說什麽。我需要能夠根據這些日期/時間進行計算。

那麽我如何確保何時從數據庫中提取日期,將它們轉換為本地日期/時間並對它們進行具體計算它們是否準確?

示例

我的申請記錄通過電子郵件發送的信息。收到電子郵件的日期/時間記錄為提交時間。電子郵件是從交換中提取的。

我需要知道的是:

1) If these emails are coming from different countries, do I just convert the Recieved date/time of the email to UTC format and store that? e.g. Email.Received.ToUniversalTime()

最佳答案

不,你不能這麽認為。 UTC時間是完全線性的,您可以安全地對它們進行計算。一旦將其轉換為當地時間,它就不再是完全線性的。

當夏令時發生變化時,當地時間會有重疊或間隙。如果您進行的計算跨越夏令時更改,則結果將關閉一小時(如果這是時間變化多少,這是最常見的)。

如果在將DateTime/DateTimeOffset值轉換為本地時間之前進行計算,則結果將始終正確。但請註意,將值轉換為本地DateTime值可能會使其不明確,如果值在夏令時變化時恰好落在重疊內,則無法判斷它是第一次還是第二次確切時間發生在當天。

轉載註明原文: 安全地將UTC日期時間轉換為當地時間(基於TZ)進行計算?