2011-10-02 15 views
4

鑑於以下2串注意到「0.185" 和」 185"從字符串轉換爲日期時間包含十進制和逗號分隔毫秒

  • 2011-09-15 17:05:37,185
  • 2011-09-15 17:05:37.185

從讀取文件(不在我的控制下),我可以看到他們有兩種格式的日期。我需要創建一個適用於這兩種場景的功能。

是''和','文化具體?

對此功能的任何建議?

這下面不工作,因爲我沒有得到一個日期。

class Program 
{ 
    static void Main(string[] args) 
    { 
     string date1="2011-09-15 17:05:37.185"; 
     string date2="2011-09-15 17:05:37,185"; 

     const string format1 = "dd/MM/yyyy HH:mm:ss.ff"; 
     const string format2 = "dd/MM/yyyy HH:mm:ss,ff"; 
     DateTime resultDate1; 
     DateTime resultDate2; 
     DateTime.TryParseExact(date1, format1, CultureInfo.InvariantCulture, DateTimeStyles.None, out resultDate1); 
     DateTime.TryParseExact(date2, format2, CultureInfo.InvariantCulture, DateTimeStyles.None, out resultDate2); 
     Console.WriteLine(resultDate1.ToString()); 
     Console.WriteLine(resultDate2.ToString()); 
     Console.Read(); 
    } 
    } 
+4

使用DateTime.TryParseExact()。 –

+2

我想。和,是文化特定 –

+0

看到我編輯的問題我沒有得到一個日期在所有 – user9969

回答

8

是。和,具體的文化?

是的。在歐洲,經常使用逗號代替小數點分隔符。

任何解決方案的建議?

是的。我的第一個想法是DateTime.ParseExact()/ DateTime.TryParseExact()函數有overload that allows an array of formats要測試。您可以同時包含en-US變體和en-GB變體。除了我不認爲這會起作用,因爲你仍然只能包含一個文化說明符。相反,我建議在將字符串傳遞給ParseExact函數之前調用.Replace(),以將字符串中可能包含的任何逗號更改爲句點。

在您更新的示例代碼中,您的格式字符串與您的示例日期不符。你應該使用這個:

YYYY-MM-DD HH:MM:SS.FFF

+0

感謝您的回覆。用一個例子編輯我的問題。我做錯了什麼? – user9969

+0

@ JoelCoehom.Thanks。閱讀文章和幫助+建議日期格式。感謝您 – user9969

+1

@ user231465,在寫回復時使用標籤填寫。 :) – bzlm

3

您應該使用DateTime.ParseExact或.TryParseExact在漢斯帕桑特的評論建議。

DateTime d1; 
string[] formats = new [] { "yyyy-MM-dd HH:mm:ss.fff", "yyyy-MM-dd HH:mm:ss,fff" }; 
DateTime.TryParseExact(s1, formats, CultureInfo.InvariantCulture, 
        DateTimeStyles.None, out d1); 

你也應該指定CultureInfo.InvariantCulture,因爲否則ParseExact方法可以使用特定的文化,日期分隔符(在地方/的,例如,在德國「」)或時間分隔符(代替‘:’) 。

+0

謝謝。按照之前的回答建議閱讀文章後,我完全按照您的建議進行了操作。 – user9969

相關問題