为什么使用"dd.Mm.yyy"格式和带有4位数年份的日期时,DateTime.ParseExact会抛出异常?

3
有关 yyy 格式的文档 指出它应该是 3 个或更多数字。那么为什么以下代码会抛出异常?请注意保留 html 标记。
string format = "dd.MM.yyy";
string s = DateTime.Now.ToString(format, CultureInfo.InvariantCulture);
DateTime d = DateTime.ParseExact(s, format, CultureInfo.InvariantCulture); //this throws FormatException

Fiddle


2
“yyy”自定义格式说明符表示年份,最少有三位数字。如果年份有超过三个有效数字,则它们将包含在结果字符串中。如果年份少于三位数字,则使用前导零填充数字以产生三位数字。从您提供的文档中可以看出,输出字符串的年份有4个字符而不是3个。因此,在代码末尾出现错误,因为您说它只有3个字符。 - derekmckinnon
文档中很多内容似乎都是以 ToString() 为基础进行撰写的。有几个地方表明 Parse 系列方法更为严格。 - Damien_The_Unbeliever
你应该期望ParseExact非常精确。 - user6144226
如果年份有超过三个有效数字,它们将包含在结果字符串中。我理解为“具有超过3位数字的年份也符合格式要求”。 - SlimShaggy
2个回答

1

我认为这看起来像是一个bug。我尝试了这个来排除任何本地化问题,但也遇到了相同的错误:

 string format = "dd.MM.yyy";
 string s = DateTime.Now.ToString(format, CultureInfo.InvariantCulture);
 DateTime d = DateTime.ParseExact(s, format, CultureInfo.InvariantCulture); //this throws FormatException

编辑:看起来这是一个重复的问题:为什么DateTime.ParseExact无法解析DateTime输出?


0

我尝试调试你的代码enter image description here

该字符串存储了所有4位数字,但是你的格式要求年份只有3位数字。我猜这就是为什么DateTime无法解析你的字符串的原因

尝试使用yyyy进行解析,这将解决你的问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接