ASP.NET中DateTime.ParseExact报无效日期时间错误如何解决
错误原因
DateTime.ParseExact 要求传入的日期字符串必须和指定的格式字符串严格逐段匹配,你当前代码里的格式定义和实际待解析字符串结构完全不符,必然抛出无效日期时间错误:
- 代码中指定的格式
"M/dd/yyyy h:mm:ss tt"仅能匹配类似5/13/2022 1:24:00 PM结构的字符串:数字月份、斜杠分隔、4位年份、12小时制时间、带AM/PM标识。 - 实际传入的
expDate值为"13-May-22 13:24:00",结构为数字日期、短英文月份名、2位年份、24小时制时间,和定义的格式没有匹配性。
修复方案
将格式字符串替换为和实际输入匹配的格式即可,修正后的代码如下:
DateTime oDate1 = DateTime.ParseExact( expDate, "dd-MMM-yy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
用到的格式符说明:
dd:两位数字的日期MMM:三位字母缩写的月份名称,在InvariantCulture规则下可识别May这类英文月份缩写yy:两位数字的年份HH:24小时制的两位小时值,可直接匹配13点这类24小时制时间表示
如果业务场景中可能传入多种不同格式的日期字符串,可以把所有支持的格式放到数组中传入方法,兼容多格式输入:
string[] allowedFormats = new string[] { "dd-MMM-yy HH:mm:ss", "M/dd/yyyy h:mm:ss tt" }; DateTime oDate1 = DateTime.ParseExact( expDate, allowedFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
内容的提问来源于stack exchange,提问作者CM05
相关产品推荐
相关产品推荐

