Dot-Net

.NET DateTime.Now 在時區更改時返回不正確的時間

  • November 17, 2008

此問題發生在夏令時更改期間。更改發生後,我們注意到我們的伺服器應用程序開始寫入日誌的時間不正確 - 提前一小時,這意味著 .NET 記憶體時區偏移量。我們不得不重新啟動我們的應用程序來解決這個問題。我寫了一個簡單的應用程序來重現這個問題。當我在應用程序執行時更改時區時,DateTime.Now 屬性會繼續生成舊時區的時間。有誰知道除了重新啟動應用程序之外是否有解決此問題的方法?

是的,目前時區被記憶體。有一個很好的理由,它避免了使用 DateTime.Now 來實現經過時間測量的損壞程式碼的麻煩。當時間突然改變一個小時或更長時間時,這樣的程式碼往往會遭受心髒病發作。

您必須呼叫 System.Globalization.CultureInfo.ClearCachedData() 來重置記憶體值。對 DateTime.Now 的下一次呼叫現在將提供新的本地時間。如果您完全使用 .NET 3.5 TimeZoneInfo 類,那麼您還需要呼叫其 ClearCachedData() 方法。您可以使用 SystemEvents.TimeChanged 事件作為觸發器。

引用自:https://stackoverflow.com/questions/296918