El valor predeterminado de TwoDigitYearMax es 2049

Las clases de calendario, como GregorianCalendar, tienen una propiedad TwoDigitYearMax que define el último año de un intervalo de 100 años que se puede representar mediante un año de dos dígitos. Esta propiedad se usa a menudo para traducir un año de dos dígitos a un año de cuatro dígitos. Anteriormente, Calendar.TwoDigitYearMax se establecía de manera predeterminada en 2029 para GregorianCalendar y otros calendarios similares a los gregorianos, como JulianCalendar y EastAsianLunisolarCalendar. Ese valor significaba que los años de dos dígitos de 00 a 29 se traducían en 2000-2029. Los años de dos dígitos de 30 a 99 se traducían en 1930-1999. El valor predeterminado de la propiedad TwoDigitYearMax para GregorianCalendar y otros calendarios de tipo gregoriano ha cambiado de 2029 a 2049. El nuevo valor significa que los años de dos dígitos de 00 a 49 se traducen a 2000-2049. Cualquier año de 50 a 99 se traducirá en 1950-1999.

Además, en Windows, el valor predeterminado de la propiedad TwoDigitYearMax ahora se obtiene de la configuración de Windows correspondiente (cuyo valor predeterminado es ahora también 2049). Esto coincide con el comportamiento anterior a .NET 5.

El análisis de fechas es la funcionalidad más afectada por este cambio.

Comportamiento anterior

En .NET 6 y .NET 7, si no se especificaba un valor para TwoDigitYearMax, al analizar una cadena como "12/10/35" con el calendario gregoriano se obtenía la fecha "10 de diciembre de 1935".

Comportamiento nuevo

A partir de .NET 8, al analizar una cadena como "12/10/35" con el calendario gregoriano se genera la fecha "10 de diciembre de 2035".

Versión introducida

.NET 8 Preview 1

Tipo de cambio importante

Este es un cambio de comportamiento.

Motivo del cambio

Es más lógico analizar un año de dos dígitos que está relativamente cerca de los dos dígitos del año actual para generar un año de cuatro dígitos en el siglo actual en lugar del anterior. El sistema operativo Windows también cambió su configuración predeterminada al mismo número (2049).

Si no desea que su aplicación dependa del valor predeterminado al analizar una cadena como fecha, puede controlar cómo se traduce un año de dos dígitos en un año de cuatro dígitos estableciendo la propiedad TwoDigitYearMax. En el código siguiente se muestra cómo establecerlo para la referencia cultural invariable.

CultureInfo clonedInvariantCulture = (CultureInfo)(CultureInfo.InvariantCulture.Clone());
clonedInvariantCulture.DateTimeFormat.Calendar.TwoDigitYearMax = 2039; // Use any desired cutoff value.

DateTime dt = DateTime.Parse("12/25/45", clonedInvariantCulture);

API afectadas

Consulte también