日期时间.现在日期格式和窗口设置

本文关键字:日期 窗口 设置 时间 格式 | 更新日期: 2023-09-27 18:36:53

我有一个用 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);

在这种情况下,我的日期时间的格式未达到其在 Windows 区域设置中指定的格式。

日期时间.现在日期格式和窗口设置

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

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

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

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

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

这样,您可以完全控制输出,而不受区域设置的影响。

首先,通过@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 中详述的日期时间格式的更常规方法如下:

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

按照@Joe的建议显式指定CultureInfo.InvariantCulture,或者按照@async的建议将特定于线程的CurrentCulture设置为CultureInfo("en-US")

希望这会有所帮助。此致敬意