2011-04-06 47 views
8

我從這個電話轉給TimeSpan.ParseExact接收FormatError例外,但我讀了MSDN documentation說,這種格式應該是正確的:這個TimeSpan.ParseExact行有什麼問題?

TimeSpan timeSpan = TimeSpan.ParseExact("172100", "HHmmss", CultureInfo.InvariantCulture); 

有人能告訴我這是爲什麼不工作?我這樣做幾乎同樣的事情一起DateTime.ParseExact打個電話,這工作得很好:

DateTime datetTime = DateTime.ParseExact("090820", "yyMMdd", CultureInfo.InvariantCulture); 

回答

15

時間跨度不使用相同的格式規則的日期時間。

你想hhmmss,而不是HHmmss。

您正在尋找在MSDN上的錯誤頁 - 你想要的東西,如:

http://msdn.microsoft.com/en-us/library/se73z7b9.aspx

+0

感謝您的幫助,它現在完美運作。 – 2011-04-06 16:07:17

2

您嘗試使用DateTime格式字符串來解析TimeSpanTimeSpan有自己的(略有不同)格式字符串。請參閱MSDN以獲取完整列表:Custom TimeSpan Format Strings

特別是,將HH更改爲hh。這會給你:

TimeSpan timeSpan = TimeSpan.ParseExact("172100", 
             "hhmmss", // Note this parameter 
             CultureInfo.InvariantCulture); 
3

Custom TimeSpan Format Strings,時間由 「H」 代表,而不是 「H」。

所以這工作得很好:

TimeSpan timeSpan = TimeSpan.ParseExact("172100", "hhmmss", 
             CultureInfo.InvariantCulture); 

您鏈接到該文檔是定製日期和時間格式字符串,這是不一樣的。他們爲DateTime.ParseExact等;文檔我聯繫到正在爲TimeSpan.ParseExact

2

解析字符串的日期時間值,然後減去它的日期值,以獲得時間作爲時間跨度:

DateTime t = DateTime.ParseExact("172100", "HHmmss", CultureInfo.InvariantCulture); 
TimeSpan time = t - t.Date; 
+0

沒有理由得到涉及的DateTime。 – Greg 2011-04-06 15:51:52

+0

我以前沒看過你的作品嗎? – 2011-04-06 15:52:09

+0

對於需要在舊版.NET中運行的代碼,這是一個合理的解決方法。 TimeSpan.ParseExact()需要.NET 4. – 2011-04-06 16:34:52