TwoDigitYearMax lautet standardmäßig 2049
Kalenderklassen wie GregorianCalendar verfügen über eine TwoDigitYearMax
-Eigenschaft, die das letzte Jahr eines Bereichs von 100 Jahren definiert, das durch eine Jahresangabe mit zwei Stellen dargestellt werden kann. Diese Eigenschaft wird häufig verwendet, um ein zweistelliges Jahr in ein vierstelliges Jahr zu übersetzen. Zuvor wurde von Calendar.TwoDigitYearMax für GregorianCalendar und andere gregorianische Kalender wie JulianCalendar und EastAsianLunisolarCalendar standardmäßig 2029 verwendet. Dieser Wert bedeutete, dass zweistellige Jahre von 00 bis 29 in 2000 bis 2029 übersetzt wurden. Zweistellige Jahre von 30 bis 99 wurden in 1930 bis 1999 übersetzt. Der Standardeigenschaftswert TwoDigitYearMax
für GregorianCalendar und andere gregorianische Kalender wurde jetzt von 2029 in 2049 geändert. Der neue Wert bedeutet, dass zweistellige Jahre von 00 bis 49 in 2000 bis 2049 übersetzt werden. Jahre zwischen 50 und 99 werden in 1950 bis 1999 übersetzt.
Darüber hinaus wird jetzt unter Windows der Standardwert der TwoDigitYearMax
-Eigenschaft aus der entsprechenden Windows-Einstellung abgerufen (für die der Standardwert nun auch 2049 ist). Dies entspricht dem Verhalten vor .NET 5.
Diese Änderung betrifft in erster Linie die Datumsanalyse.
Vorheriges Verhalten
Wenn Sie in .NET 6 und .NET 7 keinen Wert für TwoDigitYearMax angegeben haben, ergab die Analyse einer Zeichenfolge wie „12/10/35“ mit dem gregorianischen Kalender das Datum „10. Dezember 1935“.
Neues Verhalten
Ab .NET 8 ergibt die Analyse einer Zeichenfolge wie „12/10/35“ mit dem gregorianischen Kalender das Datum „10. Dezember 2035“.
Eingeführt in Version
.NET 8 Preview 1
Typ des Breaking Changes
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Es ist logischer, bei der Analyse eines zweistelligen Jahres, das relativ nahe an den beiden Ziffern des aktuellen Jahres liegt, ein vierstelliges Jahr im aktuellen Jahrhundert zu erhalten (anstatt eines vierstelligen Jahres im vorherigen Jahrhundert). Auch die Standardeinstellungen des Windows-Betriebssystems wurden in diese Zahl (2049) geändert.
Empfohlene Maßnahme
Wenn Ihre App bei der analysebasierten Umwandlung einer Zeichenfolge in ein Datum nicht den Standardwert heranziehen soll, können Sie durch Festlegen der TwoDigitYearMax-Eigenschaft steuern, wie ein zweistelliges Jahr in ein vierstelliges Jahr übersetzt werden soll. Der folgende Code zeigt, wie sie für die invariante Kultur festgelegt wird:
CultureInfo clonedInvariantCulture = (CultureInfo)(CultureInfo.InvariantCulture.Clone());
clonedInvariantCulture.DateTimeFormat.Calendar.TwoDigitYearMax = 2039; // Use any desired cutoff value.
DateTime dt = DateTime.Parse("12/25/45", clonedInvariantCulture);
Betroffene APIs
- System.DateOnly.Parse
- System.DateOnly.ParseExact
- System.DateOnly.TryParse
- System.DateOnly.TryParseExact
- System.DateTime.Parse
- System.DateTime.ParseExact
- System.DateTime.TryParse
- System.DateTime.TryParseExact
- System.DateTimeOffset.Parse
- System.DateTimeOffset.ParseExact
- System.DateTimeOffset.TryParse
- System.DateTimeOffset.TryParseExact
- System.Globalization.GregorianCalendar.TwoDigitYearMax (und andere gregorianische Kalendertypen)
- System.Globalization.GregorianCalendar.ToDateTime (und andere gregorianische Kalendertypen)
- System.Globalization.GregorianCalendar.ToFourDigitYear(Int32) (und andere gregorianische Kalendertypen)