我试过如下:
DateTime.ParseExact("Feb520161000PM",
"MMMdyyyyhhmmtt", CultureInfo.InvariantCulture)
但它给出了 FormatException
。
有趣的是
DateTime.ParseExact(DateTime.Now.ToString("MMMdyyyyhhmmtt"), "MMMdyyyyhhmmtt",
CultureInfo.InvariantCulture)
这也给出了格式异常。
Alexei's answer说得对,如果你允许的话,我想解释得更深入一些..
您认为 5
应该与 d
说明符匹配,对吗?但这不是 DateTime.ParseExact
的工作方式 under the hood .
自 The "d"
custom format specifier表示从 1
到 31
的数字,此说明符将在您的字符串中映射 52
,不只是 5
。这就是您的代码抛出 FormatException
的原因。
如您所见,除非您对其进行一些字符串操作,否则无法解析您的字符串格式。
在这种情况下,.NET 团队 suggests要么使用像 05
这样的两位数字形式,要么为您的日期和时间值插入分隔符。
您可以创建一个自定义方法来解析此MMMdyyyyhhmmtt
格式,仅解析此类格式化字符串;
public static DateTime? ParseDate_MMMdyyyyhhmmtt(string date)
{
if (date == null)
return null;
if (date.Length < 14)
return null;
if (date.Length == 14)
date = date.Insert(3, "0");
DateTime dt;
if (DateTime.TryParseExact(date, "MMMdyyyyhhmmtt",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
return dt;
return null;
}
我是一名优秀的程序员,十分优秀!