格式为“dMMyyyy”的 ParseExact 无法识别日期

Les*_*zur 1 c#

我正在查看 Microsoft 文档,但找不到任何解释为什么ParseExact不了解我的日期。

有人可以解释为什么这段代码会引发异常吗?

DateTime.ParseExact("6092019", "dMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None)
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 6

这里的问题似乎是d可以是一位数或两位数的日期,因此解析器很难确定"2102019"是指 2019 年 11 月 2 日还是...的 21 日,然后它就中断了。使用分隔符,解析器能够更智能地执行操作。它会很高兴地"2-10-2019"使用"d-MM-yyyy".

我对您的问题建议的解决方案是填充字符串,并更改您的格式字符串:

string dateToParse = "6092019";
string paddedDateToParse = dateToParse?.PadLeft(8, '0'); // 06092019
DateTime parsedDate = DateTime.ParseExact(paddedDateToParse, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None);
Run Code Online (Sandbox Code Playgroud)

网上试试


Fab*_*bio 5

来自文档:DateTime.ParseExact 方法

如果 format 是不包含日期或时间分隔符的自定义格式模式(例如“yyyyMMddHHmm”),请对 provider 参数和每个自定义格式说明符的最宽形式使用不变区域性。例如,如果要在格式模式中指定小时,请指定较宽的形式“HH”,而不是较窄的形式“H”。

因此,在您的情况下,您可能应该使用约翰回答中建议的方法 - 添加“缺失”零并使用更广泛的日期格式“dd”进行解析