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

sen*_*ale 7 c# datetime

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

  • 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))
Run Code Online (Sandbox Code Playgroud)

但是我可以有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;
}
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 9

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

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


Blu*_*kMN 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());
}
Run Code Online (Sandbox Code Playgroud)

  • 在我居住的世界的一部分,人类会将其解析为"dd.mm.yy".考虑到这一点,整个问题没有多大意义,因为它容易出现错误. (3认同)