Actualizar 2998527 hace búsquedas de código incorrectas en fechas pasadas

En este artículo se explica el problema por el que kb 2998527 búsquedas de código incorrectas en fechas pasadas cuando se usa la clase en TimeZoneInfo una aplicación.

Versión del producto original:   .NET Framework 4.6, 4.5
Número KB original:   3012229

Síntomas

Después del 26 de octubre de 2014, las aplicaciones hospedadas en sistemas que tienen instalada la actualización de zona horaria de Rusia de septiembre de 2014(KB 2998527)y que usan Microsoft .NET Framework podrían calcular el tiempo incorrectamente cuando usan la TimeZoneInfo clase.

Este problema se produce en las siguientes zonas horarias:

  • (UTC-04:30) Caracas
  • (UTC+01:00) Windhoek
  • (UTC+02:00) Kaliningrado (RTZ 1)
  • (UTC+02:00) Trípoli
  • (UTC+03:00) Minsk
  • (UTC+03:00) Moscú, San Petersburgo, Volgogrado (RTZ 2)
  • (UTC+05:00) Ekaterinburg (RTZ 4)
  • (UTC+06:00) Novosibirsk (RTZ 5)
  • (UTC+07:00) Krasnoyarsk (RTZ 6)
  • (UTC+08:00) Irkutsk (RTZ 7)
  • (UTC+09:00) Yakutsk (RTZ 8)
  • (UTC+10:00) Magadan
  • (UTC+10:00) Vladivostok, Magadan (RTZ 9)
  • (UTC+13:00) Samoa

Causa

Este problema se produce porque un cambio en el desplazamiento base de una zona horaria rompe cualquier código de las zonas horarias afectadas si ese código busca fechas pasadas mediante el uso del TimeZoneInfo .NET Framework. Esto se debe a .NET Framework no puede realizar un seguimiento de los cambios de año a año en el desplazamiento base.

Este problema se ha expuesto por los cambios recientes en las zonas horarias rusas que se describen en el artículo de Microsoft Knowledge Base 2998527.

El .NET Framework omitió previamente el desplazamiento UTC que se establece en una regla de ajuste interna. En su lugar, usó el desplazamiento UTC base en determinados cálculos. El .NET Framework también omitió las reglas de ajuste que no tienen transiciones de luz del día.

Estado

Microsoft está investigando este problema y publicará más información en este artículo cuando tenga más datos a su disposición. Se planea una nueva actualización que actualizará el .NET Framework para usar correctamente desplazamientos UTC y reglas de ajuste para zonas de tiempo.

Se recomienda instalar tanto la actualización 2998527 como la nueva actualización cuando esté disponible. Esto garantizará que las reglas de desplazamiento UTC se utilicen correctamente durante todos los años anteriores y todos los años en adelante.

Más información

Tenga en cuenta el siguiente C# de ejemplo:

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

Por ejemplo, antes de aplicar kb 2998527, este código devuelve correctamente la fecha y hora del 1 de junio de 2013 a las 04:00. Después de aplicar la actualización, el código devuelve incorrectamente la fecha y hora del 1 de junio de 2013 a las 03:00.