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