我一直在查看Microsoft文档,找不到关于ParseExact无法理解我日期的任何解释。
有人可以向我解释为什么这段代码会引发异常吗?
DateTime.ParseExact("6092019", "dMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None)
来自文档:DateTime.ParseExact Method
如果格式是自定义格式格式,则不包括日期或时间分隔符(例如“ yyyyMMddHHmm”),使用不变区域性提供程序参数和每种自定义格式的最广泛形式说明符。例如,如果要以以下格式指定小时数模式,请指定较宽的形式“ HH”,而不是较窄的形式,“ H”。
因此,在您的情况下,您可能应该使用约翰答案中建议的方法-添加“缺失”零并使用更宽的日期格式“ dd”进行解析
这里的问题似乎是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);