2014-02-20 64 views
0

我想將字符串轉換爲日期時間格式。 問題是這個字符串有不同的格式。 例如,在下面的代碼中,strDate可以是「2/20/2014 1:41:57 PM」或「20/02/2014 13:44:56」。 Convert.ToDateTime(strDate)只適用於一種格式(用戶瀏覽器設置中的格式),併爲另一種格式生成錯誤。 如何成功將字符串轉換爲獨立於字符串格式的日期時間? 感謝字符串轉換爲日期時間無關的字符串格式

DateTime dt = Convert.ToDateTime(strDate); 
+1

沒有辦法自動檢測「2/5/2014 13:14:15」代表什麼日期。這是二月五日的第二個月嗎? – M4N

+0

將字符串轉換爲日期時,您確實需要具備一些文化。否則,就像@ M4N所說的那樣,你會得到不明確的結果。 –

+0

這是正確的。事實上,我知道原始字符串的格式。所以使用Habib建議的TryParseExact可以成功轉換它。謝謝 – user2974961

回答

2

您可以使用DateTime.TryParseExactDatetime.ParseExact兼容多種格式,如:

string dateStr = "20/02/2014 1:41:57 PM"; 
string[] dateFormats = new[] 
    { 

     "d/M/yyyy h:mm:ss tt", 
     "M/d/yyyy h:mm:ss tt", 
    }; 

DateTime dt; 

if (DateTime.TryParseExact(dateStr, 
          dateFormats, 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out dt)) 
{ 
    //valid dates for formats 
} 
else 
{ 
    //invalid date 
} 

這種方法的問題是,它會給你喜歡10/02/2014 1:41:57 PM串不一致的結果,上面的代碼將解析它爲2014年2月10日,而不是October 2nd 2014,爲了避免這種情況,您可以自定義客戶端以特定格式返回日期,然後進行相應的解析。

+1

太好了。使用這段代碼,我能夠解決我的問題。事實上,我有一種方法來定義字符串的格式,所以使用這種解析方法可以成功解析。謝謝! – user2974961

+0

@ user2974961,歡迎您:)我認爲您選擇了接受的答案兩次:P – Habib

+0

現在我選擇了此答案。讓我知道,如果它不好。 – user2974961

0
你想 DateTime.Parse()

DateTime.TryParse()

DateTime dt; 
if(DateTime.TryParse(stringDate, out dt) 
{ 
    //successful datetime conversion 
} 

,如果你知道該字符串將是幾個確切格式中的一種,就可以使用DateTime.TryParseExact()並傳遞一個字符串數組每種格式(第二次重載)。

+0

感謝您的回答。我試過你的代碼,但它並沒有解析兩種格式,只有一種。區別在於,不是拋出異常,而是不輸入if。但它仍然不會創建我需要的日期時間對象。我不想使用字符串數組或每種格式,因爲我不知道所有的格式。它可能很多。謝謝 – user2974961

+0

只是一個更正...我能夠識別字符串的格式,所以使用tryparseexact方法工作。謝謝! – user2974961

相關問題