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

Yah*_*hya 17 c# datetime parsing

为什么.NET假设从下面我们的意思是2015年,而不是1915年.

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

我想,它试图接近,但它背后是否有合理的设计决策?

Joe*_*oey 27

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

在此输入图像描述

  • 那个鼠标指针!一会儿我觉得我的电脑冻结了! (10认同)
  • 我仍然使用德语语言环境(虽然使用ISO 8601日期格式),但使用英语作为UI语言.我习惯了 ;-) (4认同)
  • 每个人都应该使用ISO 8601.其他任何事情都是混乱的. (2认同)

Jak*_*rtz 16

它使用Calendar.TwoDigitYearMax财产.

此属性允许将2位数年份正确转换为4位数年份.例如,如果此属性设置为2029,则100年范围为1930年至2029年.因此,2位数值30将被解释为1930,而2位数值29则被解释为2029.

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

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

来自MSDN:

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