问题描述
我想解析一串小时,例如: 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 时它“失败”,这是我想要捕捉的行为。
即使操作员使用“01:00,001:00,1:00”作为输入,有没有办法仍然解析
感谢您的建议
解决方法
您可以做几件事情,但这取决于您是否期望时间部分可以是时间跨度中的总小时数(例如 TimeSpan.TotalHours
属性),并且您可以获得123:00
进行解析。假设情况并非如此,那么您可以使用采用多个格式字符串的 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 的解决方案有效
我现在使用多种格式,它尝试解析现在像 Charm 一样工作。
TimeSpan.ParseExact(txtManStunden.Text,new[] { "hh':'mm","hhh':'mm","h':'mm","h","hh" },null) .TotalHours.ToString("0.00");
我现在无法解析超过 24 小时的时间,有什么办法可以在不破坏当前格式的情况下修复它?