c#将任何日期格式字符串解析为datetime

时间:2013-07-23 14:32:56

标签: c# parsing datetime

在C#中,如何将格式"dd/mm/yyyy"或格式"dd-mm-yyyy"的字符串解析为日期时间? 我收到一个错误,指出我的字符串格式不正确。我需要能够解析所有格式而不仅仅是其中一种格式。

4 个答案:

答案 0 :(得分:11)

您可以定义自己喜欢的任何格式 - 此外,您还可以获取特定文化的默认列表。

var ci = new CultureInfo("en-US");
var formats = new[] { "M-d-yyyy", "dd-MM-yyyy", "MM-dd-yyyy", "M.d.yyyy", "dd.MM.yyyy", "MM.dd.yyyy" }
        .Union(ci.DateTimeFormat.GetAllDateTimePatterns()).ToArray();

DateTime.ParseExact("07/23/2013", formats, ci, DateTimeStyles.AssumeLocal).Dump();
DateTime.ParseExact("07-23-2013", formats, ci, DateTimeStyles.AssumeLocal).Dump();
DateTime.ParseExact("23-07-2013", formats, ci, DateTimeStyles.AssumeLocal).Dump();
DateTime.ParseExact("23.07.2013", formats, ci, DateTimeStyles.AssumeLocal).Dump();

<强>输出:

7/23/2013 12:00:00 AM
7/23/2013 12:00:00 AM
7/23/2013 12:00:00 AM
7/23/2013 12:00:00 AM

答案 1 :(得分:8)

mm表示分钟,大写MM表示月份。

除此之外,如果要将CultureInfo.InvariantCulture解析为日期分隔符的字符串,则必须使用/,因为这是当前文化的日期分隔符的替换字符:

这样可行:

DateTime.ParseExact("23/07/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

请参阅:The "/" Custom Format Specifier

答案 2 :(得分:4)

您需要定义要接受的日期格式。没有所有格式的东西。定义之后,您可以将格式数组传递给DateTime.ParseExact

您的代码可能如下所示:

string[] formats = new string[2] {"dd/MM/yyyy", "dd-MM-yyyy"};

string date = "23-02-2013";
try
{
    DateTime result = DateTime.ParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);
}
catch (FormatException)
{ 
    // your error handling code here
}

答案 3 :(得分:1)

您可以使用任何指定格式的DateTime.ParseExact方法。

    var d = DateTime.ParseExact(token, "dd-MM-yyyy", 
            CultureInfo.InvariantCulture, 
            DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal);