你目前正处于脱机状态,正在等待 Internet 重新连接

通过在.NET Framework 中何时过去日期更新 2998527 导致不正确的代码查找

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3012229
症状
在 2014 年 10 月 26 之后, 有 9 月 2014年俄罗斯时区的系统承载的应用程序更新 (KB 2998527) 安装并使用 Microsoft.NET Framework 的可能会不正确地计算的时间,在使用何时类时。

在以下时间区域中发生此问题 ︰

  • (UTC 04:30)。加拉加斯
  • (UTC + 01:00)Windhoek
  • (UTC + 02:00)加里宁格勒 (RTZ 1)
  • (UTC + 02:00)的黎波里
  • (UTC + 03:00)明斯克
  • (UTC + 03:00)莫斯科,圣彼得堡,伏尔加格勒 (RTZ 2)
  • (UTC + 05:00)叶卡特琳堡 (RTZ 4)
  • (UTC + 06:00)新西伯利亚 (RTZ 5)
  • (UTC + 07:00)Krasnoyarsk (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 中时区的基本偏移量的变化受影响的时区中的任何代码会破坏。这是因为.NET Framework 无法跟踪到年基本偏移量的变化。

此问题已公开俄语的时区的 Microsoft 知识库文章 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 更新会引发能反转.NET Framework 4HR 15023031985
1104557 [3.5] 俄罗斯 TZ 更新功能测试失败.NET Framework 3.5 SP1HR 15023031989
1118018 Server 2003 SP2 RU 何时问题 [4.0 版].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-第 2 部分-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 点。
修补程序

警告:本文已自动翻译

属性

文章 ID:3012229 - 上次审阅时间:06/20/2016 11:52: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
反馈
t" src="https://c.microsoft.com/ms.js">