Aktualisieren 2998527 führt zu falschen Code-Nachschlagevorgänge für vergangene Datumsangaben

In diesem Artikel wird das Problem erläutert, bei dem KB 2998527 bei der Verwendung der Klasse in einer Anwendung falsche Code-Lookups für vergangene Datumsangaben TimeZoneInfo verursacht.

Ursprüngliche Produktversion:   .NET Framework 4.6, 4.5
Ursprüngliche KB-Nummer:   3012229

Problembeschreibung

Nach dem 26. Oktober 2014 können Anwendungen, die auf Systemen gehostet werden, auf denen das Zeitzonenupdate vom September 2014 (KB 2998527) installiert ist und die microsoft .NET Framework verwenden, die Zeit bei Verwendung der Klasse möglicherweise falsch TimeZoneInfo berechnen.

Dieses Problem tritt in den folgenden Zeitzonen auf:

  • (UTC-04:30) Caracas
  • (UTC+01:00) Windhuk
  • (UTC+02:00) Wiesn (RTZ 1)
  • (UTC+02:00) Tripolis
  • (UTC+03:00) Minsk
  • (UTC+03:00) Coding, St. Gif, Volgograd (RTZ 2)
  • (UTC+05:00) Ekaterin über (RTZ 4)
  • (UTC+06:00) Novosibirsk (RTZ 5)
  • (UTC+07:00) Krasnoyarsk (RTZ 6)
  • (UTC+08:00) Irutask (RTZ 7)
  • (UTC+09:00) Yazarsk (RTZ 8)
  • (UTC+10:00) Magadan
  • (UTC+10:00) Vladivostok, Magadan (RTZ 9)
  • (UTC+13:00) Samoa

Ursache

Dieses Problem tritt auf, weil durch eine Änderung des Basisoffsets einer Zeitzone code in den betroffenen Zeitzonen unterbrochen wird, wenn dieser Code anhand der .NET Framework nach früheren Datumsangaben TimeZoneInfo sucht. Dies liegt daran, dass die .NET Framework die Jahres-zu-Jahr-Änderungen im Basisoffset nicht nachverfolgen können.

Dieses Problem wurde durch die letzten Änderungen an russischen Zeitzonen offengelegt, die im Microsoft Knowledge Base-Artikel 2998527 beschrieben sind.

Der .NET Framework zuvor den UTC-Offset ignoriert, der in einer internen Anpassungsregel festgelegt ist. Stattdessen wurde in bestimmten Berechnungen der UTC-Basisoffset verwendet. Die .NET Framework auch Anpassungsregeln ignoriert, die keine Sommerübergänge aufweisen.

Status

Dieses Problem wird derzeit von Microsoft untersucht. Entsprechende Informationen werden in der Microsoft Knowledge Base veröffentlicht, sobald sie verfügbar sind. Ein neues Update ist geplant, mit dem die .NET Framework aktualisiert wird, um UTC-Offsets und Anpassungsregeln für alle Zeitzonen korrekt zu verwenden.

Es wird empfohlen, sowohl update 2998527 als auch das neue Update zu installieren, wenn es verfügbar ist. Dadurch wird sichergestellt, dass UTC-Offsetregeln für alle letzten Jahre und in zukunft für alle Jahre korrekt verwendet werden.

Weitere Informationen

Betrachten Sie den folgenden C#-Beispielcode:

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
DateTime dt = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2013, 6, 1), tz);
Console.WriteLine(dt);

Bevor Sie z. B. KB 2998527 anwenden, gibt dieser Code das Datum und die Uhrzeit korrekt als 1. Juni 2013 um 04:00 Uhr zurück. Nachdem Sie das Update angewendet haben, gibt der Code fälschlicherweise das Datum und die Uhrzeit als 1. Juni 2013 um 03:00 Uhr zurück.