[英]How to convert datetime string in format MMMdyyyyhhmmtt to datetime object?
我试过如下:
DateTime.ParseExact("Feb520161000PM",
"MMMdyyyyhhmmtt", CultureInfo.InvariantCulture)
但它给出了FormatException
。
有趣的是
DateTime.ParseExact(DateTime.Now.ToString("MMMdyyyyhhmmtt"), "MMMdyyyyhhmmtt",
CultureInfo.InvariantCulture)
这也给格式异常。
该格式无法通过从左到右工作的常规解析进行解析 - 您需要自定义代码来从右到左解析值,因为您希望最左边的数字是可变宽度(“Feb111111111PM”)。
如果可能 - 将格式更改为具有固定宽度字段的格式(最好是 ISO8601)。 否则手动拆分字符串并从结果部分构造日期(时间部分本身可以正常工作,因此只需要手动解析日期部分)。
其他一些方法和信息可以在关于时间的类似帖子中找到 - DateTime.ParseExact - 如何使用相同格式字符串解析一位数和两位数的小时数?
Alexei的回答非常正确,如果你让我解释一下,我想解释一下。
您认为5
应该与d
说明符匹配,对吗? 但这不是DateTime.ParseExact
在DateTime.ParseExact
工作的方式。
由于"d"
自定义格式说明符表示从1
到31
,因此该说明符将在您的字符串中映射52
,而不仅仅是5
。 这就是您的代码抛出FormatException
的原因。
如您所见,除非您对其进行一些字符串操作,否则无法解析您的字符串格式。
在这种情况下,.NET 团队建议使用两位数形式(如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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.