此代码片段生成异常:
string t = @"11\10\2023";
string _fmt = @"MM\dd\yyyy";
DateTime l = DateTime.ParseExact(t, _fmt, CultureInfo.InvariantCulture);
例外是:
系统.FormatException
H结果=0x80131537
Message=String '' 未被识别为有效的日期时间。
源=System.Private.CoreLib
堆栈跟踪:
在 System.DateTime.ParseExact(String s,字符串格式,IFormatProvider 提供程序)
这是为什么?
您的格式字符串使用反斜杠。在自定义格式字符串中,反斜杠用于转义下一个字符,因此您的格式字符串需要诸如
"11d10y123"
之类的输入(它将解析为有效)。
如果您希望按字面意思处理反斜杠,则需要通过添加双反斜杠来转义它:
string _fmt = @"MM\\dd\\yyyy";
请注意,这不是 C# 语言级别的转义。该字符串确实包含双反斜杠,因为这就是您想要传递给
DateTime.ParseExact
。
(我注意到,像这样使用反斜杠作为分隔符是不寻常的。如果您可以控制格式,我建议使用正斜杠,或者 - 当我有选择时我的强烈偏好 - 遵循 ISO-8601使用诸如
yyyy-MM-dd
之类的格式,不仅可以避免各种斜杠,还可以消除“月第一与日第一”的歧义。当然,您可能无法控制正在解析的值。)