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

时间:2010-02-24 13:02:41

标签: c# datetime

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

  • 2010年2月8日
  • 2010年2月8日
  • 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;
}

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

2 个答案:

答案 0 :(得分:9)

ParseExact可以列出要检查的格式列表。

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

答案 1 :(得分:8)

您可以使用以下内容,但请注意,多个格式可能能够解析相同的日期。例如,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());
}