不同的DateTimeFormat用于开发和测试环境

本文关键字:开发 测试环境 用于 DateTimeFormat | 更新日期: 2023-09-27 18:05:39

在我的ASP中global.asax.cs的Application_BeginRequest()方法。. NET MVC项目有代码:

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格式。

你能告诉我造成这种差异的原因是什么吗?

更新:

请查看设置ASP的文化。. NET MVC在VS dev server和IIS上的应用

不同的DateTimeFormat用于开发和测试环境

如果你想覆盖所有页面的这些设置(而不是给用户一个选择),那么标准的方法是在web.config:

  <globalization uiCulture="en" culture="en-GB" />

MSDN页面还指出,如果您想使用代码,可以覆盖InitializeCulture()

InitializeCulture()发生早,但我怀疑Application_BeginRequest发生甚至更早,它的效果被覆盖。

尝试在Application_Start方法的全局。Asax,这将确保每次启动应用程序时,区域性信息都设置为您的规范。

确保你使用了正确的时间格式,例如,显示日期:

DateTime dt = DateTime.Now; Console.WriteLine(dt.ToString("d"));

啊,我明白了,对不起。

我认为这是因为当然,通过这种方式,你改变了单个线程的文化,而不是应用程序的所有线程。

将代码放在应用程序中每个线程都要执行的地方,例如,页面加载

嗯,我实际上没有发现IIS设置是负责的,但我已经在 application_preequesthandlerexecute ()中覆盖了它,它终于工作了:

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;