不同的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上的应用
如果你想覆盖所有页面的这些设置(而不是给用户一个选择),那么标准的方法是在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;