DateTime.TryParse所有可能的日期类型

我想检查日期是否格式正确。 正确的日期有很多种可能性,例如:

  • 2010年8月2日
  • 2010年8月2日
  • 02.8.2010 02.08
  • 02.August

我可以用这样的代码测试每个代码:

if (DateTime.TryParse(DateTime.ParseExact(date, "dd.M.", new CultureInfo("sl-SI")).ToString(), out dt)) 

但是我可以有40个if语句。 是否可以使用一个if语句或一个循环检查所有日期?

更新:

根据目前为止的答案,我正在测试这段代码,但我还有一个问题。 如果我只有9.2而不是9.2.2010那么这段代码将不起作用:

 CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI"); string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns(); if (DateTime.TryParseExact(date, fmts, ci, DateTimeStyles.AssumeLocal, out dt)) { DateTime = Convert.ToDateTime(date); Check = true; } 

我必须手动添加这些时间或我该怎么办?

您可以使用以下内容,但请注意,多个格式可能能够解析相同的日期。 例如,10/11/12可以解析为yy / MM / dd或MM / dd / yy,它们都是有效的美国日期格式。 MM / dd / yy更常见,因此它首先出现在列表中,并且是下面代码返回的(如果您将其与美国文化一起使用而不是示例中的文化)。

 string testValue = "10.11.12"; DateTime result; CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI"); string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns(); Console.WriteLine(String.Join("\r\n", fmts)); if (DateTime.TryParseExact(testValue, fmts, ci, DateTimeStyles.AssumeLocal, out result)) { Console.WriteLine(result.ToLongDateString()); } 

是的ParseExact可以采用要检查的格式列表。

 var formats = new[] { "Mdyyyy", "dd.MM.yyyy" }; var dateValue = DateTime.ParseExact( dateString, formats, new CultureInfo("sl-SI"), DateTimeStyles.None);