DateTime.Now日期格式和Windows设置

时间:2015-01-09 19:14:52

标签: c# datetime globalization

我有一个用C#编写的控制台应用程序,它使用DateTime.Now。 Windows区域设置为“英语(美国)”时,短日期输出为M / d / yyyy。我的应用程序的实例运行在一台机器上,文化格式设置为“英语(加拿大)”,短日期格式设置为dd / MM / yyyy。由于我希望我的应用程序在不同服务器之间保持一致,因此我将Windows区域设置中的短日期格式更改为M / d / yyyy。但是,我的应用程序仍在输出DateTime.Now为dd / MM / yyyy。是否有其他东西需要更改我的应用程序以我指定的格式输出?

我在不同的地方这样做,但这是一个例子:

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);

在这种情况下,我的DateTime没有格式化在Windows区域设置中指定的方式。

3 个答案:

答案 0 :(得分:2)

如果您可以将日期作为字符串处理,我建议您不要使用这些设置来解决此问题。你应该使用这样的东西:

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

这样,您可以独立于区域设置完全控制输出。

答案 1 :(得分:2)

您可以在应用程序启动时更改当前线程的文化,如下所示。这会影响日期格式,货币格式等。

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

有关详细信息,请参阅MSDN: Globalization(请参阅日期和时间部分)。

答案 2 :(得分:1)

首先,@ phadaphunk对答案的一点修正:行

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

会导致错误:'无法识别的转义序列'。所以,它可以更正为

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

在MSDN文章http://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx中详细说明的指定DateTime格式的更一般方法如下:

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

{@ 1}}根据@Joe的建议明确指定,或者特定于线程的CultureInfo.InvariantCulture按照@async的建议设置为CurrentCulture

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