加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 03:58:55 所属栏目:百科 来源:网络整理
导读:我正在尝试使用DateTime.TryParseExact方法,我遇到了一个我不知道的情况.我有一些格式和一些主题解析,每个应该完美匹配一种格式: var formats = new[] { "%H","HH","Hmm","HHmm","Hmmss","HHmmss",};var subjects = new[] { "1","12","123","1234","12345",
我正在尝试使用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

我认为应该是合理和可接受的:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读