如何使用可选的时间部分定义常规日期格式的DateTime解析格式?

时间:2014-10-01 00:54:02

标签: c# .net datetime datetime-format

使用可选的时间段DateTime从一般日期格式("G")解析日期的正确("d")格式是什么?

我可以有两种类型的日期:

  1. "12/13/2012 6:30:00 PM"
  2. "3/29/2013"
  3. 如何统一解析它们? 现在我正在尝试使用"G"格式进行解析,然后尝试使用"d"格式进行解析。

2 个答案:

答案 0 :(得分:7)

如果您的CurrentCulture支持MM/dd/yyyy h:mm:ss tt(我认为您的LongTimePatternh)和M/dd/yyyy(我认为您的ShortDatePatternM 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()接受的可接受格式不同,或者您只允许一种特定格式。