在我的ASP.NET MVC项目中的global.asax.cs的Application_BeginRequest()方法中有代码:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(EnCultureKey);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(EnCultureKey);
Thread.CurrentThread.CurrentCulture.DateTimeFormat = new CultureInfo(EnGBCultureKey).DateTimeFormat;
变量是
private const string EnCultureKey = "en-US";
private const string EnGBCultureKey = "en-GB";
在开发环境中,所有日期都是DD / MM / YYYY格式,但在测试环境中,它们是MM / DD / YYYY格式。
你能否告诉我这种差异的原因是什么?
更新
请查看Setting Culture for ASP.NET MVC application on VS dev server and IIS
答案 0 :(得分:4)
如果您确实要覆盖所有网页的这些设置(而不是让用户选择),那么标准方式为web.config
中的a setting:
<globalization uiCulture="en" culture="en-GB" />
如果您想使用代码,MSDN页面还会指示您覆盖InitializeCulture()
。
InitializeCulture()
发生得很早,但我怀疑Application_BeginRequest发生得更早,并且它的效果被覆盖了。
答案 1 :(得分:0)
尝试使用该代码
global.asax的Application_Start
方法,确保每次启动应用程序时,文化信息都会根据您的规范进行设置。
确保您使用正确的格式时间,例如,显示日期:
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("d"));
答案 2 :(得分:0)
啊,我明白了,抱歉。
我认为这是因为你正在以这种方式改变单个线程的文化,而不是应用程序的所有线程。
将代码放在应用程序中每个线程执行的位置,例如页面加载。
答案 3 :(得分:0)
好吧,我实际上并没有找到IIS设置的责任,但是我已经在 Application_PreRequestHandlerExecute()中覆盖了它,它最终起作用了:
var culture = CultureInfo.CreateSpecificCulture(EnCultureKey);
culture.DateTimeFormat = CultureInfo.CreateSpecificCulture(EnGBCultureKey).DateTimeFormat;
Thread.CurrentThread.CurrentCulture = culture;
culture = new CultureInfo(EnCultureKey);
culture.DateTimeFormat = Thread.CurrentThread.CurrentCulture.DateTimeFormat;
Thread.CurrentThread.CurrentUICulture = culture;