IIS 和控制台应用程序之间的 DateTime.ToString("d",cultureInfo) 输出不同

Posted

技术标签:

【中文标题】IIS 和控制台应用程序之间的 DateTime.ToString("d",cultureInfo) 输出不同【英文标题】:DateTime.ToString("d", cultureInfo) output differs between IIS and console app 【发布时间】:2016-07-22 09:29:29 【问题描述】:

我正在使用DateTime.Now.ToString("d", new CultureInfo("nl-NL"))

在本地 IIS Web 应用程序中,输出正确:

22-7-2016

在控制台应用程序中,框架选择国际/文化不变的日期表示法:

2016-07-22

这是在同一台机器上,具有完全相同的代码。我已经放置了一个断点,检查了所有输入,甚至尝试在该点运行即时窗口中的命令。在任何情况下,控制台应用程序都会出错。

谁能解释造成这种差异的原因?

【问题讨论】:

您能否包含执行此操作的控制台应用程序的完整代码,以便我们确认我们在测试中运行与您相同的代码?我的简短测试显示没有问题... 什么是日期时间? System.DateTime 类没有静态 ToString 方法,因此您提供的代码不会编译,除非您创建了一个名为 DateTime 的变量或 ToString 扩展方法。 new CultureInfo("nl-NL", false) 道歉:DateTime.Now.ToString~ @PetSerAl new CultureInfo("nl-NL", false) 成功了!我相信下面 Eli Arbel(已接受)的回答解释了原因。 【参考方案1】:

IIS 和您的控制台应用程序在不同的用户帐户下运行。如果您自定义了日期格式(例如,通过使用区域控制面板),CultureInfo 格式化程序将仅在您的帐户中使用该自定义。

您可以创建一个忽略用户设置的CultureInfo

new CultureInfo("nl-NL", useUserOverride: false)

您重置您帐户的区域设置:运行 > intl.cpl > 在下拉列表中选择 NL 区域设置 > 其他设置 > 重置。

【讨论】:

@SonerGönül 正如我在回答中所说,CultureInfo 受 Windows 设置的影响,这不是绝对的。自己试试吧。 只是为了让事情更清楚——我不是说要改变语言环境——我是指改变某个语言环境的实际格式。它在控制面板中。 @SonerGönül 这些设置是针对每个帐户的。这是我能想到的唯一能让结果不同的选项。 @EliArbel 这解释了!我的帐户确实有不同的设置,PetSerAl 建议使用 new CultureInfo("nl-NL", false)(即 userOverride=false)证实了您的解释,并允许我们抵消这种行为。如果您将这种可能性添加到您的答案中,我很乐意将其标记为已接受。 您不同意奇怪的是,默认情况下,用户帐户设置胜出即使给出了明确的文化【参考方案2】:

我在 VS 2012 中使用 .NET 4.5 在控制台和 Web 应用程序中获得了相同的结果。

你能试试这个吗?

yourDateTime.ToString("dd-MM-yyyy", new System.Globalization.CultureInfo("nl-NL"));

【讨论】:

使用显式格式字符串胜过使用“d”的目的。 仅用于测试目的。我说“你能不能试试……”看看会发生什么并找出问题所在。 没关系,但这不是答案,也不能证明什么。 好吧,如果他使用该代码并且输出字符串仍然错误,则可能其他一些代码正在更改文化设置。最好的问候。 你没有抓住重点。您今天刚刚加入,所以您可能想阅读How to Answer。如果您发布答案,则它必须是问题的答案。无法回答问题的调试提示和其他可能有用的信息应作为 cmets 发布到问题中。

以上是关于IIS 和控制台应用程序之间的 DateTime.ToString("d",cultureInfo) 输出不同的主要内容,如果未能解决你的问题,请参考以下文章

在Web和控制台应用之间共享配置文件

“DateTime”和“DateTimeOffset”之间的区别[重复]

服务器——IIS——IIS Express——IIS跟IIS Express之间的区别和关系

IIS 和服务之间的 WCF TCP 绑定设置

将应用程序发布到 IIS 时,如何在 MVC 中以 dd/mm/yyyy 格式绑定日期时间?

IIS 在 ASP.NET Core 和 ASP.NET 应用程序之间共享 cookie