2013-05-10 115 views
3

我有一個字符串,其中存儲了一個日期。將字符串中的日期轉換爲格式相同的日期時間

String date = "03-05-2013 00:00:00"; 

我把它解析爲datetime如下:

DateTime Start = DateTime.Parse(date); 

Start.ToString()給我"3/5/2013 12:0:00 AM"

我也用過:

DateTime Start = DateTime.ParseExact(date,"dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture); 

然後,Start.ToString()給我"3/5/2013 12:0:00 AM",這是與th完全相同的結果前一個。我需要保持原始格式。我該怎麼做?謝謝。

+1

在內部,所有'DateTime'值都表示爲滴答的數量。您可以通過給出正確的格式將其轉換爲字符串 – Damith 2013-05-10 08:30:45

回答

3

您解析的格式並不指示在將日期轉換回字符串時DateTime的格式。當您在某個日期撥打ToString時,它會從您的代碼正在執行的線程的當前文化中獲取格式(默認情況下爲您所使用的機器的文化)。

你可以通過格式覆蓋到這個ToString()

Start.ToString("dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

Custom Date and Time Formats

+0

請注意,這將使用當前線程文化,這可能會影響時間分隔符等內容。鑑於解析使用不變的文化,格式也應該。 – 2013-05-10 08:28:48

+0

@JonSkeet是的,忘了包含'InvariantCulture'參數 - 更新。 – James 2013-05-10 08:31:38

3

您需要傳遞ToString()調用中的格式。

Start.ToString("dd-MM-yyy HH:mm:ss"); 
2

我需要保持原來的格式。

然後,你需要重新申請同樣的模式,當你調用ToString

string formatted = Start.ToString("dd-MM-yyyy HH:mm:ss", 
            CultureInfo.InvariantCulture); 

(請注意,您應該指定爲您解析時沒有格式化的時候,要避免這樣的時間的事情同一種文化更改分離器)

注意,對於一些格式,這仍然可能無法給出確切的原始表示 - 如果你正在使用的格式,其中包括一個月的文字,例如,將匹配不區分大小寫,所以包括「MARCH」在內的輸入將是重新格式化d爲「March」。

一個DateTime價值只是日期和時間(和"kind",但那是另一回事) - 它不保持文本表示比任何一個整數做更多。區分價值的固有數據和數據的文本表示非常重要。大多數具有多種可能的文本表示的類型都沒有將「原始表示」與數據並排的概念。

相關問題