ver*_*ald 11 c# datetime tryparse
任何人都可以解释为什么以下片段返回true?
根据"d"自定义格式说明符的文档,"一位数字日的格式没有前导零." 那么为什么当我给一个前导零的一位数日时,TryParseExact不会失败?
DateTime x;
return DateTime.TryParseExact
(
"01/01/2001",
@"d\/MM\/yyyy",
null,
System.Globalization.DateTimeStyles.None,
out x
);
Run Code Online (Sandbox Code Playgroud)
UPDATE
我想也许我原本不清楚.我真正想要的是:为什么TryParseExact接受一些不完全匹配的值?从我看到的所有文档中,'d'匹配'01'和'1'就像'MM'匹配'March'和'03'一样.这里的问题不是值是等价的,它们与格式不匹配.
相关的文档片段是:
来自TryParseExact:字符串表示的格式必须与指定的格式完全匹配.
来自'd'说明符:一位数字日的格式没有前导零.
我似乎非常清楚'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
{...}
Run Code Online (Sandbox Code Playgroud)
解析器将"d"和"dd"整合在一起.
TryParseExact我想在这种情况下只是想保持灵活性。但是,当您使用格式说明符将日期转换为字符串时,“d”与“dd”应该并且会像所宣传的那样工作。