2015-01-09 156 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")

希望这会有所帮助。最好的问候,

相关问题