DateTime.ParseExact - 为什么yy变成2015而不是1915

时间:2015-11-20 14:33:51

标签: c# parsing datetime

为什么.NET假设从下面开始我们指的是2015年,而不是1915年。

var d = DateTime.ParseExact("20/11/15", "dd/MM/yy", new CultureInfo("en-GB"));

我猜,它会尝试接近,但背后有合理的设计决定吗?

2 个答案:

答案 0 :(得分:27)

这是一个系统设置,您可以根据需要自定义您的语言环境:

enter image description here

答案 1 :(得分:13)

它使用Calendar.TwoDigitYearMax属性。

  

此属性允许将2位数年份正确转换为4位数年份。例如,如果此属性设置为2029,则100年范围为1930年至2029年。因此,2位数值30表示为1930,而2位数值29表示为2029。 / p>

对于en-GB,此属性的值为2029.可以在“控制面板”中更改:

  

此属性的初始值源自“控制面板”的区域和语言选项部分中的设置。

来自MSDN

  

在解析操作中,使用" yy"解析的两位数年份。自定义格式说明符基于格式提供程序的当前日历的Calendar.TwoDigitYearMax属性进行解释。