Wartość domyślna TwoDigitYearMax to 2049
Klasy kalendarza, takie jak GregorianCalendar, mają TwoDigitYearMax
właściwość, która definiuje ostatni rok zakresu 100-letniego, który może być reprezentowany przez dwucyfrowy rok. Ta właściwość jest często używana do tłumaczenia dwucyfrowego roku na czterocyfrowy rok. Wcześniej domyślna Calendar.TwoDigitYearMax wartość to 2029 dla GregorianCalendar i inne kalendarze podobne do gregoriańskiego, takie jak JulianCalendar i EastAsianLunisolarCalendar. Ta wartość oznaczała, że dwucyfrowe lata od 00 do 29 przełożyły się na lata 2000-2029. Dwa cyfry lat od 30 do 99 przetłumaczone na 1930-1999. Domyślna TwoDigitYearMax
wartość właściwości dla GregorianCalendar i innych kalendarzy gregoriańskich została zmieniona z 2029 na 2049. Nowa wartość oznacza, że dwucyfrowe lata od 00 do 49 są tłumaczone na 2000–2049. Każdy rok od 50 do 99 zostanie przetłumaczony na lata 1950-1999.
Ponadto w systemie Windows wartość TwoDigitYearMax
domyślna właściwości jest teraz uzyskiwana z odpowiedniego ustawienia systemu Windows (wartość domyślna, dla której jest teraz również 2049). Jest to zgodne z zachowaniem przed platformą .NET 5.
Analizowanie dat to funkcja, której dotyczy ta zmiana.
Poprzednie zachowanie
Jeśli w programach .NET 6 i .NET 7 nie określono wartości TwoDigitYearMax, analizowanie ciągu takiego jak "12/10/35" z kalendarzem gregoriańskim wygenerowało datę "10 grudnia 1935 r.".
Nowe zachowanie
Począwszy od platformy .NET 8, analizowanie ciągu takiego jak "12/10/35" przy użyciu kalendarza gregoriańskiego powoduje wygenerowanie daty "10 grudnia 2035 r.".
Wprowadzona wersja
.NET 8 (wersja zapoznawcza 1)
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Bardziej logiczne jest analizowanie dwucyfrowego roku, który jest stosunkowo zbliżony do dwóch cyfr bieżącego roku, aby wygenerować czterocyfrowy rok w bieżącym stuleciu zamiast poprzedniego. System operacyjny Windows zmienił również ustawienia domyślne na tę samą liczbę (2049).
Zalecana akcja
Jeśli nie chcesz, aby aplikacja zależała od wartości domyślnej podczas analizowania ciągu do daty, możesz kontrolować, jak dwucyfrowy rok jest tłumaczony na czterocyfrowy rok, ustawiając TwoDigitYearMax właściwość . Poniższy kod pokazuje, jak ustawić ją dla niezmiennej kultury.
CultureInfo clonedInvariantCulture = (CultureInfo)(CultureInfo.InvariantCulture.Clone());
clonedInvariantCulture.DateTimeFormat.Calendar.TwoDigitYearMax = 2039; // Use any desired cutoff value.
DateTime dt = DateTime.Parse("12/25/45", clonedInvariantCulture);
Dotyczy interfejsów API
- 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 (i inne typy kalendarzy podobne do gregoriańskiego)
- System.Globalization.GregorianCalendar.ToDateTime (i inne typy kalendarzy podobne do gregoriańskiego)
- System.Globalization.GregorianCalendar.ToFourDigitYear(Int32) (i inne typy kalendarzy podobne do gregoriańskiego)