不同机器上相同文化的不同 DateTimeFormat
当我在不同的服务器上部署 Web 应用程序时遇到问题。使用相同区域性 (pt-BR) 的某些 DateTimeFormat
模式(例如 ShortDatePattern
)似乎存在不一致。
在我的开发计算机(安装了 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;
有什么想法吗?
谢谢。
I'm having a problem when I deploy my web application in different servers. There seems to be an inconsistency in some DateTimeFormat
patterns, like ShortDatePattern
, using the same culture (pt-BR).
In my development machine (Windows 7, .NET 4 installed, application targeting .NET 3.5) and a Windows Server 2008 R2 (with the application targeting .NET 4) server the ShortDatePattern is "dd/MM/yyyy"
- which is the correct, I guess.
In the production server (Windows Server 2003, using .NET 3.5) it is "d/M/yyyy"
. It is causing me tons of trouble.
I could solve the issue by setting the patterns by hand, but I'd really like to avoid doing this every time I need to output a date. Specially since this will be non-trivial in many places (like where I use MVC's Html.TextBoxFor) and will require a good amount of rewriting.
If there's a way of changing the patterns for the entire web application in one place it would be great. I've tried the following approach in the Global.asax.cs
file, with no success:
CultureInfo info = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString());
info.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
System.Threading.Thread.CurrentThread.CurrentCulture = info;
Any ideas?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
实际上,我试图在 Global.asax 文件中的错误位置使用上面的代码。
我设法通过将代码放入 Application_BeginRequest 方法来覆盖整个应用程序的 ShortDatePattern:
Actually, I was trying to use the code above in the wrong place in the Global.asax file.
I managed to override the ShortDatePattern for the entire aplication by putting the code in the Application_BeginRequest method:
解决方案是始终使用构造函数创建
CultureInfo
对象:并为
useUserOverride
参数传递false
。来自 MSDN:
基本上,使用 false 会强制 CultureInfo 使用指定区域性中的默认设置(分隔符等),而不是使用系统中定义的设置。
还要考虑到不同的操作系统在某些(小)情况下可能会产生不同的结果。
运行下面的代码 (.NET 4.5):
在 Win 7 上产生:
在 Win 8 上运行时产生:
The solution is to always create
CultureInfo
object using the constructor:and passing
false
foruseUserOverride
parameter.From MSDN:
Basically using false force the CultureInfo to use the default settings (separators, ...) from the specified culture instead of using the one defined in the system.
Consider also that different operating system can produce different results in some (small) cases.
Running the code below (.NET 4.5):
On Win 7 produce:
while running it on Win 8 produce:
在控制面板中转到区域和语言选项,选择葡萄牙语(巴西),在格式中转到自定义此格式,检查日期配置。
in control panel go to regional and language options,select portuges(brazil), in formats go to customize this format, check the date configuration.