Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 Calendar.TwoDigitYearMax były domyślnie ustawione na 2029 dla GregorianCalendar oraz innych kalendarzy podobnych do gregoriańskiego, takich jak JulianCalendar i EastAsianLunisolarCalendar. Ta wartość oznaczała, że dwucyfrowe lata od 00 do 29 przełożyły się na lata 2000-2029. Lata dwu-cyfrowe od 30 do 99 przetłumaczone są 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ść domyślna właściwości TwoDigitYearMax jest teraz uzyskiwana z odpowiedniego ustawienia systemu Windows, którego domyślna wartość wynosi 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.".
Wersja wprowadzona
.NET 8 (wersja zapoznawcza 1)
Typ zmiany przełamującej
Ta zmiana jest zmianą behawioralną.
Przyczyna 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);
Interfejsy API, których dotyczy problem
- 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)