我刚刚从Windows Sever 2003上的IIS 6迁移了大约100个ASP.net站点到Windows 2008上的IIS 7.我刚刚注意到使用DateTime.Parse之类的各种代码片段已经开始引发错误"字符串不是被认为是有效的DateTime".我已经跟踪了这一事实,即网站的CurrentCulture默认为"en-US",因此我的英国用户以意想不到的格式输入日期.
问题是,他们从哪里来到美国?从顶部开始,如果我查看"控制面板>区域和语言",一切都将设置为英语(英国).的网站的web.configs没有任一<全球化>部分或有它设置为<全球化文化="自动"的UICulture ="自动" />.在'IIS7 - .Net全球化'中,所有网站都将其文化设置为"不变语言(Invariant Country)".
我无法找到将文化设置为"en-US"的任何地方......但有些东西是.
Thread.CurrentThread.CurrentCulture.Name is outputting 'en-US'
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol is outputting '$'
Run Code Online (Sandbox Code Playgroud)
我可以通过在每个web.config中添加<globalization culture ="en-GB"uiCulture ="en-GB"/>来解决这个问题但是我真的不想手动编辑大约100个web.configs!我不想从服务器操作系统设置继承文化,这些设置设置为en-GB.
我错过了什么吗?
我面临一个相当奇怪的问题。我有一个ASP.Net网站,基本上允许用户将钱存入虚假帐户。我对输入金额进行了一些验证,其最小值为0.00。但是,当我加载页面并检查“最小值”时,它是0,00 - 因此当检查发生在后端时,最小值是0,00(注意分隔符)并且它会中断/无效。
我将 VS 设置为在配置中使用正确的区域性,我已将小数设置为默认使用句号分隔符系统端(在区域/区域设置中),并且我的IIS .Net 全球化设置为使用正确的区域性。但是,每当我加载页面时,它都会默认为 0,00 而不是 0.00。还有其他地方需要我改变吗?
当我的朋友在他的电脑上托管相同的网站时,最小值是 0.00 - 我们已经检查过,我们所有的数字格式和文化内容似乎都是相同的。我可能缺少什么吗?
我已经在我的区域设置(捷克语,文化cs-CZ)中设置了以下短时间/长时间模式:

我正在尝试在C#应用程序中使用这些设置.在以下控制台应用中,一切正常:
使用系统; 使用System.Globalization;
class Program
{
static void Main()
{
Console.WriteLine(CultureInfo.CurrentCulture.Name);
Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
正如我想的那样,输出如下:
cs-CZ
H.mm.ss
Run Code Online (Sandbox Code Playgroud)
我创建了ASP.NET应用程序,令我惊讶的是,它并没有反映出这一点.
最小的例子:
<%@ Page Language="C#" %>
<%= System.Globalization.CultureInfo.CurrentCulture.Name %><br />
<%= System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern %>
Run Code Online (Sandbox Code Playgroud)
输出:
cs-CZ
H:mm:ss
Run Code Online (Sandbox Code Playgroud)
我试过重启,.NET2.0,.NET4.0,仍然没有效果.
注意 - 这个问题是bug的一部分,我们忘记在DateTime.ToString()中包含InvariantCulture,然后由JSON反序列化器解析.(有这个问题的人有一些不同的时间格式分隔符).
解决重新创建CultureInfo的问题不是我正在寻找的问题,我只是想看看原因,因为我无法以任何方式重现问题.