如何将字符串"07:35"(HH:MM)转换为TimeSpan

VAA*_*AAA 31 c# timespan

我想知道是否有办法将24小时时间格式的字符串转换为TimeSpan.

现在我有一个"旧时尚风格":

string stringTime = "07:35";
string[] values = stringTime.Split(':');

TimeSpan ts = new TimeSpan(values[0], values[1], 0);
Run Code Online (Sandbox Code Playgroud)

Mat*_*int 92

虽然这是正确的,但这将有效:

TimeSpan time = TimeSpan.Parse("07:35");
Run Code Online (Sandbox Code Playgroud)

如果您使用它进行验证......

TimeSpan time;
if (!TimeSpan.TryParse("07:35", out time))
{
    // handle validation error
}
Run Code Online (Sandbox Code Playgroud)

考虑到这TimeSpan主要是为了处理经过的时间,而不是时间.它将接受大于24小时的值,并且也将接受负值.

如果您需要验证输入字符串是否为有效的时间(> = 00:00和<24:00),那么您应该考虑这一点:

DateTime dt;
if (!DateTime.TryParseExact("07:35", "HH:mm", CultureInfo.InvariantCulture, 
                                              DateTimeStyles.None, out dt))
{
    // handle validation error
}
TimeSpan time = dt.TimeOfDay;
Run Code Online (Sandbox Code Playgroud)

作为一个额外的好处,只要您提供适当的格式字符串,例如,这也将解析包含AM或PM的12小时格式化时间"h:mm tt".

  • `DateTime.TryParse`非常慢,`DateTime.TryParseExact`更快.我的理解是`TryParse`尝试一组模式来查看是否有任何匹配,如果你所处的格式位于该列表的底部,那么它是一个很容易避免的大量开销 (3认同)

fae*_*ter 13

尝试

var ts = TimeSpan.Parse(stringTime);
Run Code Online (Sandbox Code Playgroud)

使用较新的 .NET,您还可以

TimeSpan ts;

if(!TimeSpan.TryParse(stringTime, out ts)){
     // throw exception or whatnot
}
// ts now has a valid format
Run Code Online (Sandbox Code Playgroud)

这是在 .NET 中解析字符串的一般习惯用法,第一个版本通过抛出 FormatException 来处理错误的字符串,而后者则让布尔型 TryParse 直接为您提供信息。