解析 TimeSpan 1:00 和 01:00

Parse TimeSpan 1:00 and 01:00

我想解析一串小时数,例如: 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.TotalHours property) and you could get an input of 123:00 to parse. Assuming that's not the case, then you can use the overload of 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);

来自@phuzi 的解决方案有效

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

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

我现在无法解析大于 24 的小时数,有什么办法可以在不破坏当前格式的情况下解决这个问题?