2009-09-28 102 views
5

如何將字符串"28/09/2009"轉換爲DateTime以特定格式? 例如: 我想將「2009-09-28 17:30:40」轉換爲DateTime。 我想將「28/09/2009 17:30:40」轉換爲DateTime。 我想將「20090928 17:30:40」轉換爲DateTime。如何將字符串轉換爲c#中的特定日期時間格式?

有多種可能的格式。我試過這個:

string[] formats = new string[] {"yyyymmdd","yyyymmddThhmmss","yyyy/mm/dd hh:mm:ss","yyyy/mm/dd","yyyy-mm-dd hh:mm:ss","yyyy-mm-dd"}; 
IFormatProvider culture = new CultureInfo("en-US", true); 
DateTime formattedDate = DateTime.ParseExact(aDate, formats, culture, DateTimeStyles.None); 

這個例子拋出一個異常的消息「字符串未被識別爲有效的DateTime」。

上面的代碼有什麼問題?

+0

Falaíbrazuca! :)你能給我們一些關於你的場景的更多信息嗎?你是否收到所有三種格式的日期,具有相同的上下文? – 2009-09-29 00:07:57

+0

Falaaí....我需要閱讀一個XML文檔。在這個文檔中有表示日期的字符串。但是這些日期可以是多種格式。我必須確定這些格式並將字符串轉換爲DateTime。 – 2009-09-29 14:29:15

回答

12

您的任何格式都不會將當天放在首位,例如:"dd/MM/yyyy"

還要注意大寫'M',因爲小寫'm'是'分鐘'。你的小時有類似的問題;由於您的樣本全部使用24小時制,因此您需要大寫字母「H」。

您的格式字符串數組應該是這樣的:

string[] formats = {"dd/MM/yyyy", "yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "yyyyMMdd HH:mm:ss"}; 

這些格式完全符合您的提供的樣本串。

此外,在這種情況下,您可能希望使用不變文化,而不是en-US。否則,格式字符串中的'/'字符實際上是一種特定於文化的日期分隔符,用戶可能會忽略其本地系統。

最後,因爲你明明有麻煩匹配了串起來,你可能想使用TryParseExact(),它的工作原理就像解析準確,但使用的out參數,而不是返回值,以便它可以返回一個布爾指示成功或失敗,而不是拋出異常。

參閱完整的格式字符串參考這裏:
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

相關問題