2008-08-25 106 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();