在C#中,我怎样才能解析格式为
"dd/mm/yyyy"
或者"dd-mm-yyyy"
的字符串到日期时间类型? 我得到一个错误提示说我的字符串格式不正确。我需要能够解析所有的格式,而不仅仅是其中一个。"dd/mm/yyyy"
或者"dd-mm-yyyy"
的字符串到日期时间类型? 我得到一个错误提示说我的字符串格式不正确。我需要能够解析所有的格式,而不仅仅是其中一个。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
mm
表示分钟,大写的 MM
表示月份。
除此之外,如果你想解析带有 /
作为日期分隔符的字符串,你必须使用 CultureInfo.InvariantCulture
,因为这是替换当前文化日期分隔符的字符:
所以这样可以正常工作:
DateTime.ParseExact("23/07/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
您需要定义要接受的日期格式。并不是所有日期格式都可以使用。一旦确定了日期格式,您就可以将格式数组传递给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
}
DateTime.ParseExact
方法并指定格式。 var d = DateTime.ParseExact(token, "dd-MM-yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal);
mm
代表分钟,不是月份。 - John Koerner