gpt4 book ai didi

c# - DateTime.TryParseExact 未按预期工作

转载 作者:可可西里 更新时间:2023-11-01 08:44:33 26 4
gpt4 key购买 nike

谁能解释为什么下面的代码片段返回 true?

根据 The "d" custom format specifier 的文档, "个位数的日期格式不带前导零。"那么,当我给它一个带前导零的个位数日时,为什么 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”混为一谈。

关于c# - DateTime.TryParseExact 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com