10

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

4

4 回答 4

14

您可以定义您喜欢的任何格式 - 此外,您可以获得给定文化的默认值列表。

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
于 2013-07-23T15:21:11.823 回答
8

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

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

所以这有效:

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

请参阅:“/”自定义格式说明符

于 2013-07-23T14:36:25.473 回答
5

您需要定义您希望接受的日期格式。没有所有格式这样的东西。一旦你定义了你可以将格式数组传递给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
}
于 2013-07-23T15:07:47.737 回答
1

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

    var d = DateTime.ParseExact(token, "dd-MM-yyyy", 
            CultureInfo.InvariantCulture, 
            DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal);
于 2013-07-23T14:38:02.767 回答