DateTime.ParseExact 将日期转换为 19 世纪 [duplicate]

DateTime.ParseExact converts date to 19th century [duplicate]

提问人:manaslu 提问时间:12/13/2022 最后编辑:sinanorlmanaslu 更新时间:12/13/2022 访问量:145

问:

每当我试图为 MMyy 做超过 2030 年的年份时,它就会迫使 19 世纪。DateTime.ParseExact

例如:

var expiry30 = DateTime.ParseExact("0430", "MMyy", System.Globalization.CultureInfo.InvariantCulture);

这给出了:04/01/1930 00:00:00

但是,小于 2030 年的一年是正确的

例如:

var expiry29 = DateTime.ParseExact("0429", "MMyy", System.Globalization.CultureInfo.InvariantCulture);

这给出了:04/01/2029 00:00:00

如果我遗漏了什么,你能告诉我吗?

C# asp.net ASP.NET-MVC 日期时间

评论

1赞 Joel Coehoorn 12/13/2022
恭喜你在 Y2K 20 多年后编写了一个 Y2K 错误。自 1999 年以来,没有人理智地使用过 2 位数的年份。归根结底,在某些时候,如果你的年份只有两位数,你将不得不依靠猜测使用哪个世纪。在 .NET 中,默认猜测基于 Calendar.TwoDigitYearMax 属性,而该属性又基于系统本地化设置。
0赞 Joel Coehoorn 12/13/2022
现在我承认你有点深奥,找到文档似乎很困难。但是,如果从“自定义日期和时间格式”字符串开始,则在链接到正确位置的页面中会讨论 yy 格式Calendar.TwoDigitYearMax

答: 暂无答案