Share via


TwoDigitYearMax standard är 2049

Kalenderklasser, till exempel GregorianCalendar, har en TwoDigitYearMax egenskap som definierar det sista året i ett 100-årsintervall som kan representeras av ett tvåsiffrigt år. Den här egenskapen används ofta för att översätta ett tvåsiffrigt år till ett fyrsiffrigt år. Calendar.TwoDigitYearMax Tidigare har standardvärdet 2029 för GregorianCalendar och andra gregorianska kalendrar, till exempel JulianCalendar och EastAsianLunisolarCalendar. Det värdet innebar att tvåsiffriga år från 00 till 29 översattes till 2000-2029. Tvåsiffriga år från 30 till 99 översatta till 1930-1999. TwoDigitYearMax Standardegenskapsvärdet för GregorianCalendar och andra gregorianska kalendrar har nu ändrats från 2029 till 2049. Det nya värdet innebär att tvåsiffriga år från 00 till 49 översätts till 2000-2049. Alla år mellan 50 och 99 kommer att översättas till 1950-1999.

I Windows hämtas dessutom standardvärdet TwoDigitYearMax för egenskapen från motsvarande Windows-inställning (standardvärdet som nu också är 2049). Detta matchar beteendet före .NET 5.

Datumparsning är de funktioner som påverkas mest av den här ändringen.

Tidigare beteende

Om du inte angav något värde för TwoDigitYearMaxi .NET 6 och .NET 7 parsade du en sträng som "12/10/35" med den gregorianska kalendern som skapade datumet "10 december 1935".

Nytt beteende

Från och med .NET 8 parsar du en sträng som "12/10/35" med den gregorianska kalendern som skapar datumet "10 december 2035".

Version introducerad

Förhandsversion 1 av .NET 8

Typ av icke-bakåtkompatibel ändring

Den här ändringen är en beteendeförändring.

Orsak till ändringen

Det är mer logiskt att parsa ett tvåsiffrigt år som är relativt nära de två siffrorna för innevarande år för att producera ett fyrsiffrigt år under det nuvarande århundradet i stället för det föregående. Windows-operativsystemet ändrade också sina standardinställningar till samma nummer (2049).

Om du inte vill att appen ska vara beroende av standardvärdet när du parsar en sträng till ett datum kan du styra hur ett tvåsiffrigt år översätts till ett fyrsiffrigt år genom att ange TwoDigitYearMax egenskapen. Följande kod visar hur du ställer in den för den invarianta kulturen.

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

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

Berörda API:er

Se även