谁能解释以下代码段为何返回true的原因?

根据The "d" custom format specifier的文档,“单位数字的日期格式不带前导零。”那么,当我给TryParseExact一个前导零的单位位数时,为什么TryParseExact不会失败?

DateTime x;
return DateTime.TryParseExact
(
    "01/01/2001",
    @"d\/MM\/yyyy",
    null,
    System.Globalization.DateTimeStyles.None,
    out x
);

更新

我想也许我本来就不清楚。我真正想要了解的是:为什么TryParseExact接受一些不完全匹配的值?我所见过的所有文档中的,'d'匹配'01'和'1'都是一个错误,就像'MM'匹配'March'以及'03'一样。 这里的问题不是值相等,而是值不匹配格式。

相关的文档摘要是:
  • 来自TryParseExact:字符串表示形式的格式必须与指定的格式完全匹配。
  • 来自The 'd' Specifier:格式为一位数的日期不带前导零。

  • 在我看来,很明显“01”的前导0,因此与“d”不完全匹配。

    最佳答案

    从DateTimeParse.ParseByFormat()中的.NET 4源:

    case 'd':
        // Day & Day of week
        tokenLen = format.GetRepeatCount();
        if (tokenLen <= 2) {
            // "d" & "dd"
    
            if (!ParseDigits(ref str, tokenLen, out tempDay)) {
                if (!parseInfo.fCustomNumberParser ||
                    !parseInfo.parseNumberDelegate(ref str, tokenLen, out tempDay)) {
    
                    result.SetFailure(ParseFailureKind.Format, "Format_BadDateTime", null);
                    return (false);
                }
            }
            if (!CheckNewValue(ref result.Day, tempDay, ch, ref result)) {
                return (false);
            }
        }
        else
        {...}
    

    解析器将“d”和“dd”集中在一起。

    09-06 14:21