DateTime TryParseExact包含3个字母月份的字符串

时间:2013-11-30 02:11:20

标签: c# datetime

我正在编写一个扩展方法,使用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

我无法弄清楚我的格式字符串有什么问题。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:8)

来自您的评论:

  1. 如果您要解析使用3个信件月MMM
  2. 如果您要解析24小时格式,则应使用HH代替hh
  3. 试试这个:

    DateTime.TryParseExact(value, "dd MMM yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out converted);
    

答案 1 :(得分:3)

我看到两个问题:

  1. November不是3个字母的月份,而是Nov。要解析完整日期名称,请使用MMMM
  2. 要解析24小时的时间HH
  3. 这应该有效:

    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

并且hhHH来解析您输入的小时部分。