【问题标题】:Parse TimeSpan 1:00 and 01:00解析时间跨度 1:00 和 01:00
【发布时间】:2021-07-02 09:22:37
【问题描述】:

我想解析一个小时的字符串,例如: 16:40、01:00、12:00、1:00、4:90

我的解析方式:

txtManDezStunden.Text = TimeSpan.ParseExact(txtManStunden.Text, "hh':'mm", null).TotalHours.ToString("0.00");

如果 txtManStunden.Text 的输入为 01:00,则一切正常 当输入为 1:00 时它“失败”,这是我想要捕捉的行为。

即使 Operator 使用 "01:00, 001:00, 1:00" 作为输入,有没有办法仍然解析

感谢您的任何建议

【问题讨论】:

  • 提供多种格式的替代方法:尝试使用TimeSpan.ParseExact(txtManStunden.Text, new []{"hh':'mm", "h':'mm"}, null) 匹配一位数和两位数的小时数。不过,我认为这不适用于三位数的小时数
  • @phuzi 很确定hhh 无效,事实上我认为没有办法解析001:00
  • @DavidG 已经更新了我的评论;o)
  • @Nico 当您解析001:00 时,您是否期望001 部分是总小时数?例如可以包含123:00 吗?
  • 单个h 涵盖101001 确实无效。

标签: c# parsing timespan


【解决方案1】:

您可以做几件事,但这取决于您是否期望小时部分可以是时间跨度中的总小时数(例如TimeSpan.TotalHours 属性),您可以获得@987654324 的输入@解析。假设不是这样,那么您可以使用采用多个格式字符串的TimeSpan.ParseExact 的重载,例如:

var input = "001:00";
var formats = new [] { "h':'mm", "'0'h':'mm" };
var timeSpan = TimeSpan.ParseExact(input, formats, null);

但是,如果确实需要解析123:00,则需要手动解析字符串。幸运的是,通过拆分字符串很容易做到这一点。

var input = "001:00";
var parts = input.Split(':');  
var hours = int.Parse(parts[0]);
var minutes = int.Parse(parts[1]);
var timeSpan = new TimeSpan(hours, minutes, 0);

【讨论】:

    【解决方案2】:

    @phuzi 的解决方案奏效了

    我现在使用它尝试解析的多种格式现在就像一个魅力。

    TimeSpan.ParseExact(txtManStunden.Text, new[] { "hh':'mm", "hhh':'mm", "h':'mm", "h", "hh" }, null) .TotalHours.ToString("0.00");

    我现在无法解析大于 24 的小时数,有什么方法可以在不破坏当前格式的情况下修复它?

    【讨论】:

      猜你喜欢
      • 2019-12-01
      • 2015-09-08
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      相关资源
      最近更新 更多