谁能解释为什么以下代码片段返回 true?
根据文档“d”自定义格式说明符 http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#dSpecifier,“一位数日期的格式不带前导零。”那么,当我给它一个带前导零的个位数日期时,为什么 TryParseExact 不会失败呢?
DateTime x;
return DateTime.TryParseExact
(
"01/01/2001",
@"d\/MM\/yyyy",
null,
System.Globalization.DateTimeStyles.None,
out x
);
UPDATE
我想也许我一开始就不清楚。我真正想要表达的是:为什么 TryParseExact 接受一些不完全匹配的值?从我见过的所有文档来看,“d”匹配“01”和“1”就像“MM”匹配“March”和“03”一样是一个错误。这里的问题不是值相等,而是它们与格式不匹配。
相关文档片段是:
From 尝试精确解析 http://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact.aspx: 字符串表示形式的格式必须与指定的格式完全匹配。
From 'd' 说明符 http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#dSpecifier: 一位数日期的格式不带前导零。
对我来说,“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”合并在一起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)