【问题标题】:Different DateTimeFormat for the same culture in different machines不同机器中相同文化的不同 DateTimeFormat
【发布时间】:2011-03-31 20:02:04
【问题描述】:

我在不同服务器上部署 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;

有什么想法吗?

谢谢。

【问题讨论】:

    标签: asp.net datetime cultureinfo


    【解决方案1】:

    实际上,我试图在 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;
    }
    

    【讨论】:

      【解决方案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: /
      

      【讨论】:

        【解决方案3】:

        在控制面板中选择区域和语言选项,选择葡萄牙(巴西),在格式中自定义此格式,检查日期配置。

        【讨论】:

        • 虽然它可以在我的机器上解决它,但我无法更改服务器上的格式。
        猜你喜欢
        • 1970-01-01
        • 2016-11-08
        • 2010-11-28
        • 1970-01-01
        • 2014-09-22
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多