Delen via


Standaard twoDigitYearMax is 2049

Kalenderklassen, zoals GregorianCalendar, hebben een TwoDigitYearMax eigenschap die het laatste jaar van een bereik van 100 jaar definieert dat kan worden vertegenwoordigd door een jaar met twee cijfers. Deze eigenschap wordt vaak gebruikt om een jaar van twee cijfers te vertalen naar een jaar met vier cijfers. Voorheen was Calendar.TwoDigitYearMax dit standaard ingesteld op 2029 voor GregorianCalendar en andere Gregoriaanse kalenders, zoals JulianCalendar en EastAsianLunisolarCalendar. Deze waarde betekende dat tweecijferige jaren tussen 00 en 29 omgezet in 2000-2029. Tweecijferige jaren van 30 tot en met 99 omgezet in 1930-1999. De standaardeigenschapswaarde TwoDigitYearMax voor GregorianCalendar en andere Gregoriaanse kalenders is nu gewijzigd van 2029 in 2049. De nieuwe waarde betekent dat tweecijferige jaren van 00 tot en met 49 worden omgezet in 2000-2049. Elk jaar van 50 tot 99 wordt omgezet in 1950-1999.

Bovendien wordt in Windows de standaardwaarde van de TwoDigitYearMax eigenschap nu opgehaald uit de bijbehorende Windows-instelling (de standaardwaarde waarvoor nu ook 2049 is). Dit komt overeen met het gedrag vóór .NET 5.

Datumparsering is de functionaliteit die het meest wordt beïnvloed door deze wijziging.

Vorig gedrag

Als u in .NET 6 en .NET 7 geen waarde hebt opgegeven voor TwoDigitYearMaxhet parseren van een tekenreeks zoals '12/10/35' met de Gregoriaanse kalender, is de datum '10 december 1935' geproduceerd.

Nieuw gedrag

Vanaf .NET 8 parseert u een tekenreeks zoals 12-10-35 met de Gregoriaanse kalender de datum "10 december 2035".

Versie geïntroduceerd

.NET 8 Preview 1

Type wijziging die fouten veroorzaken

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Het is logischer om een jaar van twee cijfers te parseren dat relatief dicht bij de twee cijfers van het huidige jaar ligt om een jaar van vier cijfers in de huidige eeuw te produceren in plaats van de vorige. Het Windows-besturingssysteem heeft ook de standaardinstellingen gewijzigd in hetzelfde nummer (2049).

Als u niet wilt dat uw app afhankelijk is van de standaardwaarde bij het parseren van een tekenreeks naar een datum, kunt u bepalen hoe een jaar van twee cijfers wordt omgezet in een jaar met vier cijfers door de TwoDigitYearMax eigenschap in te stellen. De volgende code laat zien hoe u deze instelt voor de invariante cultuur.

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

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

Betrokken API's

Zie ook