使用和不使用前导零解析DateTime

时间:2017-04-10 08:00:41

标签: c# date datetime tryparse

我有一个TextBox,用户可以在其中键入日期。我只期望以下格式:

12.12.2017
12.02.2017
12.2.2017
02.12.2017
2.12.2017
02.02.2017
2.2.2017

所以可能会有一个前导零。

我目前正在使用以下代码解析DateTime:

DateTime myDate = new DateTime();
bool success = DateTime.TryParseExact(TboDate.Text, "dd.MM.yyyy", 
                   CultureInfo.CurrentUICulture, DateTimeStyles.None, out myDate);

使用该代码无法成功解析12.2.2017之类的日期。但我不想每次都检查字符串,然后用匹配的格式d.M.yyyy, dd.M.yyyy, d.MM.yyyy解析它,依此类推。有没有更简单的方法告诉方法,可以有前导零?

1 个答案:

答案 0 :(得分:8)

可以使用Parse / TryParse f.e解析所有问题。 de-DE文化:

var dates = new[] { "12.12.2017", "12.02.2017", "12.2.2017", "02.12.2017", "2.12.2017", "02.02.2017", "2.2.2017" };      

foreach (var dateStr in dates)
{
    DateTime dt;
    if (!DateTime.TryParse(dateStr, CultureInfo.CurrentUICulture, DateTimeStyles.None, out dt))
    {
        Console.WriteLine("not valid: " + dateStr);
    }
}  

但如果您指定所有允许的格式,也可以使用ParseExact

string[] allowedFormats = { "dd.MM.yyyy", "d.MM.yyyy", "dd.M.yyyy", "d.M.yyyy" };
foreach (var dateStr in dates)
{
    DateTime dt;
    if (!DateTime.TryParseExact(dateStr, allowedFormats, CultureInfo.CurrentUICulture, DateTimeStyles.None, out dt))
    {
        Console.WriteLine("not valid: " + dateStr);
    }
}

更新

正如Jon Skeet所说,没有必要指定多个,这会处理所有:"d.M.yyyy"