谁能解释以下代码段为何返回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'一样。 这里的问题不是值相等,而是值不匹配格式。
相关的文档摘要是:
在我看来,很明显“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”集中在一起。