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

问题描述:

我正在使用DateTime.Now.ToString("d", new CultureInfo("nl-NL"))IIS和控制台应用程序之间的DateTime.ToString(“d”,cultureInfo)输出不同

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

22-7-2016 

在一个控制台应用程序,该框架选择了国际/区域性不变的日期标记:

2016-07-22 

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

任何人都可以解释导致差异的原因吗?

+1

您能否包含您的控制台应用程序的完整代码,因此我们可以确认我们在测试中运行的代码与您的代码相同?我的简短测试显示没有问题... – Chris

+0

什么是DateTime? System.DateTime类没有静态的ToString方法,因此您所提供的代码将不会编译,除非您创建了一个名为DateTime的变量或ToString扩展方法。 –

+1

'new CultureInfo(“nl-NL”,false)' – PetSerAl

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

您可以创建一个CultureInfo无视用户设置:

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

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

+0

@SonerGönül正如我在回答中所说的,'CultureInfo'受Windows设置的影响,并不是绝对的。亲自尝试一下。 –

+0

只是为了说清楚 - 我并不是指改变语言环境 - 我的意思是改变某个语言环境的实际格式。它在控制面板中。 –

+0

@SonerGönül这些设置是每个帐户。这是我能想到的唯一选择,会使结果不同。 –

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

你能试试吗?

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

使用明确的格式字符串会胜过使用“d”的目的。 – CodeCaster

+1

仅用于测试目的。我说“你可以试试...”看看会发生什么情况并找出问题所在。 –

+0

这很好,但那不是一个答案,也没有证明任何东西。 – CodeCaster