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
这是同一台机器,使用完全相同的代码。我已经放置了一个断点,检查了所有的输入,甚至尝试了在当前窗口中运行命令。在任何情况下,控制台应用程序都会出错。
任何人都可以解释导致差异的原因吗?
IIS和您的控制台应用程序在不同的用户帐户下运行。如果您已经定制了日期格式(例如通过使用区域控制面板),那么CultureInfo
格式化程序将仅在您的帐户中使用该定制。
您可以创建一个CultureInfo
无视用户设置:
new CultureInfo("nl-NL", useUserOverride: false)
你重设帐户的区域设置:运行>intl.cpl
>选择在下拉列表NL区域>其他设置>复位。
@SonerGönül正如我在回答中所说的,'CultureInfo'受Windows设置的影响,并不是绝对的。亲自尝试一下。 –
只是为了说清楚 - 我并不是指改变语言环境 - 我的意思是改变某个语言环境的实际格式。它在控制面板中。 –
@SonerGönül这些设置是每个帐户。这是我能想到的唯一选择,会使结果不同。 –
我获得了与.NET 4.5控制台和Web应用程序相同的结果,在2012年VS
你能试试吗?
yourDateTime.ToString("dd-MM-yyyy", new System.Globalization.CultureInfo("nl-NL"));
使用明确的格式字符串会胜过使用“d”的目的。 – CodeCaster
仅用于测试目的。我说“你可以试试...”看看会发生什么情况并找出问题所在。 –
这很好,但那不是一个答案,也没有证明任何东西。 – CodeCaster
您能否包含您的控制台应用程序的完整代码,因此我们可以确认我们在测试中运行的代码与您的代码相同?我的简短测试显示没有问题... – Chris
什么是DateTime? System.DateTime类没有静态的ToString方法,因此您所提供的代码将不会编译,除非您创建了一个名为DateTime的变量或ToString扩展方法。 –
'new CultureInfo(“nl-NL”,false)' – PetSerAl