Actualización de 2998527 hace que las búsquedas de código incorrecto en fechas pasadas utilizando TimeZoneInfo en el.NET Framework

Síntomas

Después de actualizan el 26 de octubre de 2014, aplicaciones que se hospedan en sistemas que tienen la zona horaria ruso de septiembre de 2014 (KB 2998527 ) instalado y que utilizan el.NET Framework de Microsoft podría calcular tiempo incorrectamente al usar la clase TimeZoneInfo .

Este problema se produce en las zonas horarias siguientes:

  • (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) Ekaterinburgo (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 de una zona horaria base divide cualquier código en las zonas horarias afectadas si ese código busca fechas pasadas mediante TimeZoneInfo en el.NET Framework. Esto es porque el.NET Framework no puede controlar los cambios de año a año en el desplazamiento de base.

Este problema se expone los cambios recientes en ruso de las zonas horarias que se describen en el artículo de Microsoft Knowledge Base 2998527.

Anteriormente, el.NET Framework omite el desplazamiento de UTC se establece en una regla de ajuste interno. En su lugar, utiliza el desplazamiento de hora UTC base en determinados cálculos. El.NET Framework también omite las reglas de ajuste que no tienen transiciones de horario de verano.

Estado

Microsoft está investigando este problema y publicará más información en este artículo cuando la información esté disponible. Se planifica una nueva actualización que actualizará la de.NET Framework para utilizar correctamente los desplazamientos de hora UTC y las reglas de ajuste para todas las zonas horarias.

Recomendamos que instale la actualización 2998527 y la nueva actualización, cuando esté disponible. Esto asegurará que las reglas de desplazamiento de UTC se utilizan correctamente para todos los años anteriores y todos los años en el futuro.

Más información

Considere el siguiente código de ejemplo de C#:

  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 la actualización de 2998527 KB, este código devuelve correctamente la fecha y hora como el 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 como el 1 de junio de 2013 a las 03:00.
Propiedades

Id. de artículo: 3012229 - Última revisión: 22 ene. 2017 - Revisión: 1

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 1.0

Comentarios