2010-11-16 62 views
6

我試圖以下String解析爲DateTime對象在C#:DateTime.ParseExact根本不工作,爲什麼?

DateTime.ParseExact("20101108 230125", "yyyyMMdd hhmmss", null) 

雖然值看起來是正確的ParseExact方法只是不斷給我下面的:

字符串未被識別爲一個有效的DateTime。

有人可以告訴我爲什麼以及如何解析上面的字符串,而不必手動的方式嗎?是不是ParseExact應該是爲了這種場合?

回答

21

你有幾個小時錯格式,應該全部是大寫:

DateTime.ParseExact("20101108 230125","yyyyMMdd HHmmss", null) 

小寫hh指定時間採用12小時制(含AM/PM)。大寫HH是24小時制時間。請致電documentation of custom DateTime format strings

+0

爲什麼會造成異常?就我個人而言,我希望將23轉換爲11而不是拋出異常。它是ParseExact導致它嗎? – 2010-11-16 09:48:14

+1

@Marcus:'ParseExact'會做它說的;使用指定的* exact *格式解析字符串。由於'hh'告訴它希望在那個位置有一個12小時的時間值,'23'顯然不在可接受值的範圍內。它解析確切的字符串,不進行轉換。所以是的,這個異常是由'ParseExact'方法拋出的。 – 2010-11-16 10:01:47

+0

乾杯的擴展解釋。 :) – 2010-11-16 10:13:09

2

嘗試使用:

var dt = DateTime.ParseExact("20101108 230125", "yyyyMMdd HHmmss", null) 

的 「HH」 是12小時時間和 「HH」 24小時。

+0

哎呀剛剛看到Fredrik的回答... – 2010-11-16 09:05:37