为什么 DateTime.ParseExact 在解析这个文字字符串时会抛出异常?

问题描述 投票:0回答:1

此代码片段生成异常:

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 提供程序)

这是为什么?

c# datetime
1个回答
2
投票

您的格式字符串使用反斜杠。在自定义格式字符串中,反斜杠用于转义下一个字符,因此您的格式字符串需要诸如

"11d10y123"
之类的输入(它将解析为有效)。

如果您希望按字面意思处理反斜杠,则需要通过添加双反斜杠来转义它:

string _fmt = @"MM\\dd\\yyyy";

请注意,这不是 C# 语言级别的转义。该字符串确实包含双反斜杠,因为这就是您想要传递给

DateTime.ParseExact

(我注意到,像这样使用反斜杠作为分隔符是不寻常的。如果您可以控制格式,我建议使用正斜杠,或者 - 当我有选择时我的强烈偏好 - 遵循 ISO-8601使用诸如

yyyy-MM-dd
之类的格式,不仅可以避免各种斜杠,还可以消除“月第一与日第一”的歧义。当然,您可能无法控制正在解析的值。)

© www.soinside.com 2019 - 2024. All rights reserved.