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) 输出不同的主要内容,如果未能解决你的问题,请参考以下文章
“DateTime”和“DateTimeOffset”之间的区别[重复]
服务器——IIS——IIS Express——IIS跟IIS Express之间的区别和关系