2015-01-09 160 views
0

我有一個用C#編寫的控制檯應用程序,它使用DateTime.Now。將Windows區域設置爲「英語(美國)」時,短日期輸出爲M/d/yyyy。我的應用程序在文化格式設置爲「英語(加拿大)」並且短日期格式設置爲dd/MM/yyyy的機器上運行了一個實例。由於我希望在不同服務器上的應用程序內保持一致,因此我將Windows的「區域」設置中的短日期格式更改爲M/d/yyyy。但是,我的應用程序仍在輸出DateTime.Now作爲dd/MM/yyyy。是否還有其他需要更改的應用程序以我指定的格式輸出?DateTime.Now日期格式和Windows設置

我這樣做在不同的地方,但這裏有一個例子:

TimeZoneInfo customTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime thisTime = TimeZoneInfo.ConvertTime(DateTime.Now, customTimeZone); 
//The below output is not formatted how the Windows Region short date is specified. 
Console.Writeline(thisTime); 

在這種情況下,我的日期時間沒有格式化它在Windows地區設置是如何規定的。

+1

只需執行你喜歡的格式。 – phadaphunk 2015-01-09 19:18:15

+1

請顯示一些執行輸出的實際代碼。我完全第二次大寫,改變當地的環境可能不是正確的做法。 – Codor 2015-01-09 19:19:01

+0

是的,這將工作。但是,我不明白爲什麼更改Windows設置不會強制執行我指定的日期格式。 – kittyhawk 2015-01-09 19:19:53

回答

2

您可以在應用程序啓動時按如下方式更改當前線程的文化。這會影響日期格式,貨幣格式等

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 

MSDN: Globalization瞭解更多信息(參見日期和時間段)。

2

如果您可以處理日期爲字符串,我不建議您使用設置來解決此問題。你應該使用這樣的東西:

DateTime.Now.ToString("MM\/dd\/yyyy") 

這樣你就可以獨立於區域設置完全控制輸出。

+0

'DateTime.ToString(「MM/dd/yyyy」)將使用特定於文化的日期分隔符 - 例如德文化的時期。最好明確指定CultureInfo.InvariantCulture,或者轉義'/'字符 - 例如「MM \/DD \/YYYY」。 – Joe 2015-01-09 19:26:15

+0

我更喜歡最新的但很好的捕捉。更新。 – phadaphunk 2015-01-09 19:28:23

1

首先,一點點修正答案由@phadaphunk:行

DateTime.Now.ToString("MM\/dd\/yyyy"); 

將導致一個錯誤:「無法識別的轉義序列」。

String.Format("{0:MM/dd/yyyy}",DateTime.Now); 

CultureInfo.InvariantCulture明確指定由@Joe的建議:因此,它可以在MSDN文章http://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx詳細的將是以下被糾正爲

DateTime.Now.ToString(@"MM\/dd\/yyyy"); 

指定DateTime格式更普遍的方式,或者按照@async建議的線程專用CurrentCulture設置爲CultureInfo("en-US")

希望這會有所幫助。最好的問候,

相關問題