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

前端之家收集整理的这篇文章主要介绍了c# – .NET:为什么TryParseExact在Hmm和Hmmss上失败?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用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天内接受,除非有人想出更好的一个.谢谢您的帮助!

解决方法

好的,所以我想我已经把这一切搞清了,感谢更多的阅读,实验和其他有用的答案.发生的情况是,H,m和s实际上可以抓住两位数字,即使其余的格式不会有足够的数字.所以例如格式Hmm和数字123,H将抓住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#相关文章