解析带和不带前导零的 DateTime

Parse DateTime with and without leading zeros

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

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 等等。有没有更简单的方法来告诉方法,可以有前导零?

Parse/TryParse f.e 都可以毫无问题地解析它们。去德文化:

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"