使用可选的时间段DateTime
从一般日期格式("G")
解析日期的正确("d")
格式是什么?
我可以有两种类型的日期:
"12/13/2012 6:30:00 PM"
"3/29/2013"
如何统一解析它们?
现在我正在尝试使用"G"
格式进行解析,然后尝试使用"d"
格式进行解析。
答案 0 :(得分:7)
如果您的CurrentCulture
支持MM/dd/yyyy h:mm:ss tt
(我认为您的LongTimePattern
有h
)和M/dd/yyyy
(我认为您的ShortDatePattern
已M
1}})作为标准日期和时间格式,使用DateTime.TryParse(String, out DateTime)
method可以解决您的所有问题。
string s = "";
DateTime dt;
if (DateTime.TryParse(s, out dt))
{
// Your string parsed successfully.
}
如果这些格式不是CurrentCulture
的标准日期和时间格式,则使用DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)
overload可能是最佳选择,因为它将格式部分视为字符串数组。这意味着,您可以提供多种格式,并且您的字符串将在第一次成功匹配时进行解析。
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.
}
解析具有"/"
custom format specifier的字符串时要小心。它具有用当前文化或指定的文化日期分隔符替换我的特殊含义。这意味着如果您的CurrentCulture
DateSeparator
property不是/
,如果您的字符串和格式是相同的格式,则解析操作将失败甚至。
答案 1 :(得分:3)
只需使用DateTime.Parse()
或者您想要进行安全的解析尝试DateTime.TryParse()
DateTime dt1, dt2;
dt1 = DateTime.Parse("12/13/2012 6:30:00 PM");
dt2 = DateTime.Parse("3/29/2013");
OR
DateTime.TryParse("12/13/2012 6:30:00 PM", out dt1);
DateTime.TryParse("3/29/2013", out dt2);
您只需使用DateTime.ParseExact()
或提供格式,如果它与DateTime.Parse()
接受的可接受格式不同,或者您只允许一种特定格式。