我正在编写一个扩展方法,使用DateTime
方法将包含日期和时间的特定字符串解析为DateTime.TryParseExact()
对象。
格式的一个例子如下:
"29 November 2013 20:04"
我用来将其解析为DateTime的代码是:
public static DateTime MyToDateTime(this string value)
{
DateTime converted;
DateTime.TryParseExact(value, "dd MMM yyyy hh:mm", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out converted);
return converted;
}
结果始终为DateTime.Min
(即0001-01-01 00:00:00.000
)
我无法弄清楚我的格式字符串有什么问题。任何帮助将不胜感激。
答案 0 :(得分:8)
来自您的评论:
MMM
。HH
代替hh
。试试这个:
DateTime.TryParseExact(value, "dd MMM yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out converted);
答案 1 :(得分:3)
我看到两个问题:
November
不是3个字母的月份,而是Nov
。要解析完整日期名称,请使用MMMM
。HH
。这应该有效:
DateTime.TryParseExact(value, "dd MMMM yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out converted);
进一步阅读
答案 2 :(得分:2)
尝试添加额外的M和大写H
DateTime.TryParseExact(value, "dd MMMM yyyy H:mm", .....
有关详细信息,请参阅此处:How can I visualize the way various DateTime formats will display?
答案 3 :(得分:1)
MMM
代表月份的缩写名称,因此它不是您所期待的。请改用MMMM
。
在MSDN上查找所有自定义日期和时间格式字符串:Custom Date and Time Format Strings。
您还应该检查TryParseExact
方法返回的值。它在解析失败时返回false
,在没有任何问题时返回true
。
并且hh
应HH
来解析您输入的小时部分。