gpt4 book ai didi

c# - .NET:为什么 TryParseExact 在 Hmm 和 Hmmss 上失败?

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

我正在尝试 DateTime.TryParseExact 方法,但遇到了一个我不明白的情况。我有一些格式和一些主题要解析,每个都应该完美匹配其中一种格式:

var formats = new[]
{
"%H",
"HH",
"Hmm",
"HHmm",
"Hmmss",
"HHmmss",
};

var subjects = new[]
{
"1",
"12",
"123",
"1234",
"12345",
"123456",
};

然后我尝试解析它们并打印出结果:

foreach(var subject in subjects)
{
DateTime result;
DateTime.TryParseExact(subject, formats,
CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault,
out result);

Console.WriteLine("{0,-6} : {1}",
subject,
result.ToString("T", CultureInfo.InvariantCulture));
}

我得到以下信息:

1      : 01:00:00
12 : 12:00:00
123 : 00:00:00
1234 : 12:34:00
12345 : 00:00:00
123456 : 12:34:56

关于我的问题……为什么它在 123 和 12345 上失败了?那些不应该变成 01:23:00 和 01:23:45 吗?我在这里错过了什么?我怎样才能让它像我期望的那样工作?


更新: 所以,看来我们可能已经弄清楚为什么会失败。似乎 H 实际上是获取两位数字,然后只为 mm 保留一位数字,这样就会失败。但是,有没有人知道如何更改此代码以获得我正在寻找的结果?

另一个更新: 认为我现在找到了一个合理的解决方案。添加它作为答案。将在 2 天内接受它,除非其他人想出更好的。感谢您的帮助!

最佳答案

好的,所以我想我现在已经弄清楚了这一切,这要归功于更多的阅读、实验和这里其他有用的答案。发生的事情是 Hms 实际上会尽可能地获取两位数字,即使没有足够的数字用于其余部分的格式。因此,例如对于格式 Hmm 和数字 123H 将获取 12 并且只会有一个3 还剩。而 mm 需要两位数,所以它失败了。 Tadaa

因此,我目前的解决方案是仅使用以下三种格式:

var formats = new[]
{
"%H",
"Hm",
"Hms",
};

在我的问题的其余代码保持不变的情况下,我将得到以下结果:

1      : 01:00:00
12 : 12:00:00
123 : 12:03:00
1234 : 12:34:00
12345 : 12:34:05
123456 : 12:34:56

我认为这应该既合理又可以接受:)

关于c# - .NET:为什么 TryParseExact 在 Hmm 和 Hmmss 上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016206/

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