2013-07-22 75 views
5

我必須從格式yyyyMMddhhmmss格式的字符串解析DateTime對象。解析自定義日期時間格式

如果我運行這段代碼,它工作正常:

DateTime y = new DateTime(2013, 07, 22, 15, 35, 23); 
string x = y.ToString("yyyyMMddhhmmss", CultureInfo.InvariantCulture); 

但是,如果我運行這段代碼 - 看似相反的操作 - 我得到一個異常:

string x = "20130722153523"; 
DateTime y = DateTime.ParseExact(x, "yyyyMMddhhmmss", CultureInfo.InvariantCulture); 

唯一的例外是:

System.FormatException: String was not recognized as a valid DateTime. 

我很難過,因爲這裏有什麼問題。我究竟做錯了什麼?

注意:不要擔心時區。我可以在以後處理正確的時區。

+0

在第一碼樣本x是20130722033523,不20130722153523 – empi

回答

15

的問題是,您所指定的日期,時間格式使用hh爲12小時格式,但輸入字符串中有在這方面15。它不能解析這個,因爲15超出了預期的範圍。

嘗試使用HH爲24小時時間格式來代替:

string x = "20130722153523"; 
DateTime y = DateTime.ParseExact(x, "yyyyMMddHHmmss", CultureInfo.InvariantCulture); 

進一步閱讀:

+3

直接來自MSDN:如果格式是自定義格式模式不包含日期或時間分隔符(例如「yyyyMMdd HHmm」),請使用供應商參數的不變文化和每個自定義格式說明符的最寬格式。例如,如果要以格式指定小時數,請指定較寬的格式「HH」,而不是較窄的格式「H」。 –

+3

+1。此外,請檢查此:http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx - (quote)**給調用方的說明**: 在.NET Framework 4中,ParseExact方法將引發FormatException if要解析的字符串包含一個小時組件和AM/PM指示符,這些指示符不一致。在.NET Framework 3.5和更早版本中,AM/PM標識符被忽略。(/ quote) – Renan