从一般日期格式("G")
带有可选时间部分("d")
的字符串中解析日期的正确DateTime
格式是什么?
我可以有两种类型的日期:
-
"12/13/2012 6:30:00 PM"
-
"3/29/2013"
如何统一解析它们?现在我正在尝试使用"G"
格式解析,然后如果它没有使用"d"
格式解析。
如果你的CurrentCulture
支持MM/dd/yyyy h:mm:ss tt
(我假设你的LongTimePattern
有h
(和M/dd/yyyy
(我假设你的ShortDatePattern
有M
(作为标准的日期和时间格式,使用DateTime.TryParse(String, out DateTime)
方法可以解决你所有的问题。
string s = "";
DateTime dt;
if (DateTime.TryParse(s, out dt))
{
// Your string parsed successfully.
}
如果这些格式不是CurrentCulture
的标准日期和时间格式,则使用DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)
重载可能是最佳选择,因为它将格式部分作为字符串数组。这意味着,您可以提供多种格式,并且您的字符串将在第一次成功匹配时被解析。
string s = "";
string[] formats = { "MM/dd/yyyy h:mm:ss tt", "M/dd/yyyy" };
DateTime dt;
if (DateTime.TryParseExact(s, formats, CultureInfo.CurrentCulture,
DateTimeStyles.None, out dt))
{
// Your string parsed with one of speficied format.
}
分析具有自定义格式说明符"/"
字符串时要小心。它具有将我替换为当前区域性或指定的区域性日期分隔符的特殊含义。这意味着如果你CurrentCulture
的DateSeparator
属性不是/
,即使你的字符串和格式是相同的格式,你的解析操作也会失败。
只需使用 DateTime.Parse()
或者如果您想进行安全的解析尝试DateTime.TryParse()
DateTime dt1, dt2;
dt1 = DateTime.Parse("12/13/2012 6:30:00 PM");
dt2 = DateTime.Parse("3/29/2013");
或
DateTime.TryParse("12/13/2012 6:30:00 PM", out dt1);
DateTime.TryParse("3/29/2013", out dt2);
仅当格式与DateTime.Parse()
接受的接受格式不同,或者只允许一种特定格式时,才需要使用DateTime.ParseExact()
或提供格式。