解析时间跨度 1:00 和 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 时它“失败”,这是我想要捕捉的行为。

即使操作员使用“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 小时的时间,有什么办法可以在不破坏当前格式的情况下修复它?