我在不同服务器中部署Web应用程序时遇到问题。某些DateTimeFormat
模式似乎存在不一致,例如ShortDatePattern
,使用相同的文化(pt-BR)。
在我的开发机器(安装了Windows 7,安装了.NET 4,面向.NET 3.5的应用程序)和Windows Server 2008 R2(面向.NET 4的应用程序)服务器上,ShortDatePattern为"dd/MM/yyyy"
- 这是我猜错了。
在生产服务器(Windows Server 2003,使用.NET 3.5)中,它是"d/M/yyyy"
。这给我带来了很多麻烦。
我可以通过手动设置模式来解决问题,但我真的希望每次需要输出日期时都这样做。特别是因为这在许多地方都是非常重要的(比如我使用MVC的Html.TextBoxFor)并且需要大量的重写。
如果有办法在一个地方更改整个Web应用程序的模式,那就太棒了。我在Global.asax.cs
文件中尝试了以下方法,但没有成功:
CultureInfo info = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString());
info.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
System.Threading.Thread.CurrentThread.CurrentCulture = info;
有什么想法吗?
谢谢。
答案 0 :(得分:3)
实际上,我试图在Global.asax文件的错误位置使用上面的代码。
我设法通过将代码放在Application_BeginRequest方法中来覆盖整个应用程序的ShortDatePattern:
protected void Application_BeginRequest()
{
CultureInfo info = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString());
info.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
System.Threading.Thread.CurrentThread.CurrentCulture = info;
}
答案 1 :(得分:2)
解决方案是始终使用构造函数创建CultureInfo
对象:
CultureInfo(string name, bool useUserOverride)
并传递false
useUserOverride
参数。
来自MSDN:
useUserOverride:一个布尔值,表示是否使用用户选择的区域性 设置(true)或默认文化设置(false)。
基本上使用false强制CultureInfo使用指定区域性的默认设置(分隔符,...),而不是使用系统中定义的默认设置。
还要考虑不同的操作系统在某些(小)情况下可以产生不同的结果。 运行下面的代码(.NET 4.5):
CultureInfo ci = new CultureInfo("it-IT", false);
String date = DateTime.Now.ToString(ci);
Console.WriteLine(date);
Console.WriteLine("Time Separator: " + ci.DateTimeFormat.TimeSeparator);
Console.WriteLine("Date Separaotr: " + ci.DateTimeFormat.DateSeparator);
Console.ReadKey();
在Win 7上产生:
29/10/2013 14:12:33
Time Separator: :
Date Separaotr: /
在Win 8上运行时生成:
29/10/2013 15.08.43
Time Separator: .
Date Separaotr: /
答案 2 :(得分:0)
在控制面板中转到区域和语言选项,选择portuges(巴西),格式为自定义此格式,检查日期配置。