2014-08-31 49 views
0

我創建了具有代碼以下行的主要方法簡單的控制檯應用程序輸入的日期:爲什麼電腦認爲我在MM/dd/yyyy格式,而不是DD/MM/YYYY

DateTime dt = DateTime.Parse("01/03/2014 00:01:05"); 
string d = dt.ToString("dd.MM.yyyy"); 
Console.WriteLine(d); 

我沒有提供任何錯誤處理或TryParse方法來簡化此問題。

正如你在上面的代碼中看到的,我想以DateTime格式轉換字符串。然後我更改日期的格式,然後打印輸出。上述程序的

輸出將被2014年3月1日

現在如果我更改了上述代碼25/02/2014日期,那麼我會得到一個異常輸入字符串的不以正確的格式

我只是故意在dd/MM/yyyy中輸入日期。所以,現在我的問題是:我應該如何告訴計算機我願意以dd/MM/yyyy輸入日期而不是MM/dd/yyyy?

+1

您的計算機運行在哪個區域? – 2014-08-31 19:10:05

+0

它在印度運行。 UTC + 5:30 – Vishal 2014-08-31 19:10:43

+0

這顯然是一個解析問題;有些地方先寫月份,有些則先寫日期。提供一個全球化設置,以表明您所期望的文化:http://msdn.microsoft.com/zh-cn/library/kc8s65zs(v=vs.110).aspx – 2014-08-31 19:10:44

回答

4

如果你不提供你有不同的文化使用當前的文化。顯然你現在的文化日期格式有一個月,一個月,然後一天。

您可以使用DateTime.ParseExactCultureInfo.InvariantCulture

DateTime dt = DateTime.ParseExact("01/03/2014 00:01:05", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

現在dt.ToString("dd.MM.yyyy")得到2014年3月1日。

+0

對不起,添我的電腦運行Windows,我總是看到時間在dd/MM/yyyy格式。所以,如果它的CurrentCulture,那麼我也不應該有任何問題。以及我的時區是UTC + 5:30。 – Vishal 2014-08-31 19:15:55

+0

@Vishal在你的項目中,如果你調試System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat,那麼運行時的值是多少? – 2014-08-31 19:18:09

+0

@TimSchmelter我接受你的論點。這是一個新的新項目,我剛剛創建了測試DateTimeProblems。現在的問題是,如果我像你說的那樣使用ParseExact方法,我會得到輸出。以及如果我使用CultureInfo.CurrentCulture,那麼我也得到相同的結果。但我不知道爲什麼我沒有使用Parse Method。不管怎麼說,還是要謝謝你。 – Vishal 2014-08-31 19:24:53

1

這可能是因爲您的系統日期本地化必須設置爲MM/dd/yyyy格式。解析日期時,您可能會嘗試使用CultureInfo.InvariantCulture

嘗試這樣的:

DateTime dt = DateTime.ParseExact("01/03/2014 00:01:05", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

還要檢查DateTime.Parse

編輯:

檢查日期時間設置在這裏:

enter image description here

+1

有什麼好奇的是,你的(兩次downvoted)答案是一樣upvoted一個,有時候怪異的投票! – 2014-08-31 19:16:34

+1

好的。你提供了一個質量不好的答案,只是爲了確保你是第一個,然後你已經在相關部分中添加了點點滴滴,同時已經發布了一個好的答案。我特別討厭那些試圖遊戲系統而不是專注於質量的人。這就是爲什麼你收到我的downvote。 – 2014-08-31 19:17:10

+0

@JeroenVannevel: - 明白了,將來我會記住這一點。謝謝:) – 2014-08-31 19:18:12

相關問題