开发和测试环境的不同DateTimeFormat

时间:2011-08-14 16:31:50

标签: c# asp.net-mvc

在我的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

4 个答案:

答案 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;