TwoDigitYearMax 默认值为 2049

日历类(例如 GregorianCalendar)具有 TwoDigitYearMax 属性,该属性定义 100 年范围内的最后一年,它可以用两位数的年份来表示。 此属性通常用于将两位数的年份转换为四位数的年份。 以前,GregorianCalendar 和其他类似公历的日历(例如 JulianCalendarEastAsianLunisolarCalendar)的 Calendar.TwoDigitYearMax 默认为 2029。 该值意味着从 00 到 29 的两位数年份转换为 2000-2029。 从 30 到 99 的两位数年份转换为 1930-1999。 GregorianCalendar 和其他类似公历的默认 TwoDigitYearMax 属性值现已从 2029 更改为 2049。 新值意味着从 00 到 49 的两位数年份被转换为 2000-2049。 从 50 到 99 的任何年份都将转换为 1950-1999。

此外,在 Windows 上,TwoDigitYearMax 属性的默认值现在是从相应的 Windows 设置中获取的(现在的默认值也是 2049)。 这与 .NET 5 之前的行为相匹配。

日期分析是受此更改影响最大的功能。

旧行为

在 .NET 6 和 .NET 7 中,如果没有为 TwoDigitYearMax 指定值,则使用公历分析“12/10/35”等字符串会生成日期“1935 年 12 月 10 日”。

新行为

从 .NET 8 开始,使用公历分析“12/10/35”等字符串会生成日期“2035 年 12 月 10 日”。

引入的版本

.NET 8 预览版 1

中断性变更的类型

此更改为行为更改

更改原因

更符合逻辑的做法是,分析一个两位数的年份,该年份相对接近两位数的当前年份,以生成一个本世纪(而不是上一个世纪)的四位数年份。 Windows 操作系统也会将其默认设置更改为相同的数字 (2049)。

如果不希望应用在将字符串分析为日期时依赖默认值,可以通过设置 TwoDigitYearMax 属性来控制如何将两位数年份转换为四位数年份。 以下代码显示如何为固定区域性设置该属性。

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

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

受影响的 API

另请参阅