DateTime.Now 日期格式和 Windows 设置
DateTime.Now Date Format and Windows Settings
我有一个用 C# 编写的控制台应用程序,它使用了 DateTime.Now。 Windows 区域设置为 "English (United States)",短日期输出为 M/d/yyyy。我的应用程序 运行 在计算机上有一个实例,文化格式设置为 "English (Canada)",短日期格式设置为 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 区域设置中指定的格式进行格式化。
如果您可以将日期作为字符串处理,我不建议您使用设置来解决这个问题。你应该使用这样的东西:
DateTime.Now.ToString("MM\/dd\/yyyy")
这样您就可以独立于区域设置完全控制输出。
您可以在应用程序启动时按如下方式更改当前线程的文化。这会影响日期格式、货币格式等
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
有关详细信息,请参阅 MSDN: Globalization(请参阅日期和时间部分)。
首先,对@phadaphunk 的回答稍作更正:行
DateTime.Now.ToString("MM\/dd\/yyyy");
会导致错误:'unrecognized escape sequence'。所以,它可以更正为
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);
CultureInfo.InvariantCulture
根据@Joe 的建议明确指定,或根据@async 的建议将线程特定的 CurrentCulture
设置为 CultureInfo("en-US")
。
希望这会有所帮助。最好的问候,
我有一个用 C# 编写的控制台应用程序,它使用了 DateTime.Now。 Windows 区域设置为 "English (United States)",短日期输出为 M/d/yyyy。我的应用程序 运行 在计算机上有一个实例,文化格式设置为 "English (Canada)",短日期格式设置为 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 区域设置中指定的格式进行格式化。
如果您可以将日期作为字符串处理,我不建议您使用设置来解决这个问题。你应该使用这样的东西:
DateTime.Now.ToString("MM\/dd\/yyyy")
这样您就可以独立于区域设置完全控制输出。
您可以在应用程序启动时按如下方式更改当前线程的文化。这会影响日期格式、货币格式等
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
有关详细信息,请参阅 MSDN: Globalization(请参阅日期和时间部分)。
首先,对@phadaphunk 的回答稍作更正:行
DateTime.Now.ToString("MM\/dd\/yyyy");
会导致错误:'unrecognized escape sequence'。所以,它可以更正为
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);
CultureInfo.InvariantCulture
根据@Joe 的建议明确指定,或根据@async 的建议将线程特定的 CurrentCulture
设置为 CultureInfo("en-US")
。
希望这会有所帮助。最好的问候,