Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Třídy kalendáře, například GregorianCalendar, mají TwoDigitYearMax vlastnost, která definuje poslední rok rozsahu 100 let, který může být reprezentován dvouciferným rokem. Tato vlastnost se často používá k překladu dvoumístného roku na čtyřmístný rok. Dříve byla Calendar.TwoDigitYearMax ve výchozím nastavení nastavena hodnota 2029 pro GregorianCalendar a další kalendáře podobné gregoriánskému kalendáři, například JulianCalendar a EastAsianLunisolarCalendar. Tato hodnota znamenala, že dvouciferné roky od 00 do 29 se přeloží na rok 2000–2029. Dvouciferné roky od 30 do 99 jsou přeloženy na 1930–1999. Výchozí hodnota vlastnosti TwoDigitYearMax pro kalendáře GregorianCalendar a další podobné gregoriánskému typu byla změněna z roku 2029 na 2049. Nová hodnota znamená, že dvouciferné roky od 00 do 49 se přeloží na 2000–2049. Každý rok od 50 do 99 bude přeložen do roku 1950–1999.
Kromě toho v systému Windows je nyní výchozí hodnota TwoDigitYearMax vlastnosti získána z odpovídajícího nastavení Systému Windows (výchozí hodnota, pro kterou je nyní také 2049). Odpovídá chování před .NET 5.
Analýza data je funkce, které jsou touto změnou nejvíce ovlivněné.
Předchozí chování
Pokud jste v rozhraní .NET 6 a .NET 7 nezadali žádnou hodnotu pro TwoDigitYearMax, při analýze řetězce jako "12/10/35" s použitím gregoriánského kalendáře byl výsledkem datum "10. prosince 1935".
Nové chování
Počínaje .NET 8, parsování řetězce jako "12/10/35" pomocí gregoriánského kalendáře vytvoří datum "10. prosince 2035".
Verze byla představena
.NET 8 Preview 1
Typ zásadní změny
Tato změna je změna chování.
Důvod změny
Je logičtější analyzovat dvouciferný rok, který je relativně blízko dvouciferných číslic aktuálního roku, aby se místo předchozího století vytvořil čtyřmístný rok. Operační systém Windows také změnil výchozí nastavení na stejné číslo (2049).
Doporučená akce
Pokud nechcete, aby vaše aplikace při analýze řetězce na datum závisela na výchozí hodnotě, můžete určit, jak se dvouciferný rok přeloží na čtyřmístný rok nastavením TwoDigitYearMax vlastnosti. Následující kód ukazuje, jak ji nastavit pro invariantní kulturu.
CultureInfo clonedInvariantCulture = (CultureInfo)(CultureInfo.InvariantCulture.Clone());
clonedInvariantCulture.DateTimeFormat.Calendar.TwoDigitYearMax = 2039; // Use any desired cutoff value.
DateTime dt = DateTime.Parse("12/25/45", clonedInvariantCulture);
Ovlivněná rozhraní 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 (a další typy kalendářů podobné gregoriánskému kalendáři)
- System.Globalization.GregorianCalendar.ToDateTime (a další typy kalendářů podobné gregoriánskému kalendáři)
- System.Globalization.GregorianCalendar.ToFourDigitYear(Int32) (a další typy kalendářů podobné gregoriánskému kalendáři)