2008-08-25 84 views
29

我有一些xxh:yym格式的字符串,其中xx是小时,yy是类似“05h:30m”的分钟。将这种类型的字符串转换为TimeSpan的优雅方法是什么?解析字符串到TimeSpan

回答

26

这似乎是工作,但它是一个有点hackish:

TimeSpan span; 


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span)) 
      MessageBox.Show(span.ToString()); 
+15

我会建议使用也许`TimeSpan.TryParse(“hh'h:‘mm'm’”,走出跨度)`一个更清洁,更可靠的解决方案 – mike 2011-01-04 23:54:40

+2

除了当字符串为25H:30米 – 2011-09-14 08:39:03

+1

注意:此解决方案仅限于23h:59m – fubo 2013-07-26 13:17:58

1

TimeSpan.ParseTimeSpan.TryParse没有选择?如果您未使用“已批准”格式,则需要手动进行解析。我可能会在正则表达式中捕获你的两个整数值,然后尝试将它们解析为整数,从那里你可以用它的构造函数创建一个新的TimeSpan。

6

DateTime.ParseExactDateTime.TryParseExact可让您指定输入的确切格式。在获得DateTime后,您可以获取TimeSpanDateTime.TimeOfDay

在没有TimeSpan.TryParseExact的情况下,我认为一个“优雅”的解决方案是混合在一起的。

@buyutec如你所怀疑的,如果时间跨度超过24小时,这种方法将不起作用。

2

Here'e一种可能性:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); 

如果你想在你的代码更优雅,使用扩展方法:

public static TimeSpan ToTimeSpan(this string s) 
{ 
    TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); 
    return t; 
} 

然后,你可以做

"05h:30m".ToTimeSpan();