更新程式 2998527 在過去的日期會不正確的程式碼對應,利用.NET Framework 中的 TimeZoneInfo

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:3012229
徵狀
在 [2014 年 10 月 26 之後會放置在具有年 9 月 2014年俄羅斯時區的系統的應用程式會更新 (2998527 KB) 安裝,並使用 Microsoft 的.NET Framework 可能不正確地計算時間,使用TimeZoneInfo類別時。

這個問題會發生在下列時區 ︰

  • (UTC-04:30)。卡拉卡斯
  • (UTC + 01:00)Windhoek
  • (UTC + 02:00)卡里寧格勒 (1 RTZ)
  • (UTC + 02:00)的黎波里
  • (UTC + 03:00)Minsk
  • (UTC + 03:00)莫斯科,聖彼得堡,窩瓦格瑞德 (RTZ 2)
  • (UTC + 05:00)伊卡特林堡 (RTZ 4)
  • (UTC + 06:00)新西伯利亞 (RTZ 5)
  • (UTC + 07:00)克拉斯諾雅 (RTZ 6)
  • (UTC + 08:00)伊爾庫次克 (RTZ 7)
  • (UTC + 09:00)雅庫茨克 (RTZ 8)
  • (UTC + 10:00)馬加丹
  • (UTC + 10:00)海參崴,馬加丹 (RTZ 9)
  • (UTC + 13:00)薩摩亞
發生的原因
之所以發生這個問題,因為基底的時區位移的變更會中斷任何受影響的時區中的程式碼,如果該程式碼利用.NET Framework 中的TimeZoneInfo查閱過去的日期。這是因為.NET Framework 無法追蹤每年變更的基底的位移。

這個問題是最近的變更與俄羅斯微軟知識庫文件 2998527 中所述的時區所公開的。

.NET Framework 先前忽略的設定中的內部的調整規則的 UTC 位移。相反地,它會在某些計算中使用的基底的 UTC 位移。.NET Framework 也會忽略沒有日光節約轉換的調整規則。
狀況說明
這個問題已經解決不只在最,最近發行的.NET Framework 中,但也可以在下列的知識庫文件 ︰

識別碼標題目標自訂 01知識庫文件
1040166 [] 4.5.x俄羅斯的時區變更影響,在.NET 上.NET Framework 4.5/4.5.1/4.5.2HR 14113011110
1065448 在.NET 上的 [3.5] 俄羅斯時區變更影響.NET Framework 3.5 SP1HR 14113013380
1065447 在.NET 上的 [4.0] 俄羅斯時區變更影響.NET Framework 4HR 14113012132
1104556 [4.0] 俄羅斯的 TZ 更新就會擲回 InvalidOperationException.NET Framework 4HR 15023031985
1104557 [3.5] 俄羅斯的 TZ 更新功能性測試失敗.NET Framework 3.5 SP1HR 15023031989
1118018 Server 2003 SP2 上的 [4.0] RU TimeZoneInfo 問題.NET Framework 4HR 15043057756
1083122 DTS: [4.5.2] 時序列化/解除-serializing 就會造成不正確的日期時間.NET Framework 4.5/4.5.1/4.5.2HR 15023026376
1083123 DTS: [4.0] 不正確的結果時序列化/解除-serializing 日期時間.NET Framework 4HR 15023031985
1087142 DTS: [3.5] 不正確的結果時序列化/解除-serializing 日期時間.NET Framework 3.5 SP1HR 15023031989
1083122 視需要 ︰ 俄羅斯 TZ-Part2-NDP 4.5.1/4.5.2 RTM-Win8.1RTM/Win2K12R2RTM/WinRT8.1RTM-KB3018511.NET Framework 4.5/4.5.1/4.5.2視需要3018511

其他相關資訊
請考慮下列 C# 範例程式碼 ︰

  TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");  DateTime dt = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2013, 6, 1), tz);  Console.WriteLine(dt);
例如,在套用 KB 2998527 更新之前,這個程式碼正確傳回的日期及時間成為 2013 年 6 月 1,04:00。您套用此更新程式之後,程式碼不正確傳回的日期和時間 2013 年 6 月 1,為 03:00。
hotfix

警告:本文為自動翻譯

內容

文章識別碼:3012229 - 最後檢閱時間:06/20/2016 11:53:00 - 修訂: 3.0

Microsoft .NET Framework 4.6, Microsoft .NET Framework 4.5.2, Microsoft .NET Framework 4.5.1, Microsoft .NET Framework 4.5, Microsoft .NET Framework 4.0, Microsoft .NET Framework 3.5, .NET Core 5.0

  • kbmt KB3012229 KbMtzh
意見反應