2015-06-17 105 views
1

我想解析DateTime(在C#中)從en-USde-DE或只是以不同的格式。輸入日期時間是06/17/2015 09:22:30 AMDateTime.ParseExact不起作用,因爲我期望

我已經試過:

DateTime date = DateTime.ParseExact(dateString, "d.MM.yyyy HH:mm:ss", new CultureInfo("de-DE")); 
兩個版本我有同樣的輸出

DateTime date = DateTime.ParseExact(dateString, "d.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

- 這意味着在輸出相同的輸入,一切都沒有改變。我可以在ToString()方法中更改它,但我需要它作爲DateTime。

string test = datum.ToString("d.MM.yyyy HH:mm:ss"); 
output is `17.06.2015 09:22:30` 

當前線程的CurrentCultureInfo可能是問題嗎?因爲當前線程設置爲CultureInfo en-US。 我已將CultureInfo.DefaultThreadCurrentUICulture設置爲de-DE,但它也不起作用。

我失去了什麼?我相信這只是我腦海中的一個缺點。如果解決方案非常簡單 - 抱歉的時間 - 無論如何,謝謝你的每一個答案!

+1

是否正確解析?我懷疑是因爲你在'06/17/2015 09:22:30 AM'上使用了錯誤的格式。所以這個問題我不清楚。什麼意思_「輸出 - 輸出==輸入」_? –

+0

對不起,這個文本部分沒有寫得很清楚。只是想說輸出和輸入完全一樣!我的錯! –

+1

'DateTime' *沒有格式*。如果你想要輸出特定的格式,它總是在'ToString'(或'string.Format'等)中。 'DateTime.ParseExact'只是將一個已知格式的字符串(注意你的錯誤)轉換爲'DateTime';但'DateTime'確實*不*保存關於格式的信息。只要使用正確的'ToString'過載,例如'datum.ToString(CultureInfo.GetCultureInfo( 「去-DE」))'。 – Luaan

回答

3

這就是CultureInfo.InvariantCulture默認格式,所以你不需要使用ParseExact

DateTime date = DateTime.Parse(dateString, CultureInfo.InvariantCulture); 
string inGermanFormat = date.ToString("d.MM.yyyy HH:mm:ss", new CultureInfo("de-DE")); 
+0

就像Luaan說的,我必須在'ToString()'方法中完成它。我一直認爲我可以直接用'DateTime.Parse'方法做到這一點。感謝您提供快速簡單的答案。 –

+1

@DaveStockinger:是的,他是對的,'DateTime'只是一個值。在內部它基本上只是一個'UInt64'(無符號的64位整數)。因此,如果不將其顯示爲字符串,則沒有格式。 –

+0

所以'DateTime'計算爲'Ticks'的權利?就像我之前說過的 - 我以爲我可以直接在'DateTime'變量中更改'CultureInfo',並將'CultureInfo'保存在其中。但是現在一切都很清晰,邏輯!再次感謝! –

相關問題