【问题标题】:ASP.NET Date FormatASP.NET 日期格式
【发布时间】:2012-01-10 14:58:55
【问题描述】:
  • 我在使用特定服务器上的应用程序时遇到问题。

在除问题环境之外的所有环境中

服务器正确识别所有客户端都在英国并解析英国格式的日期:

DD/MM/YYYY

在问题服务器上

问题似乎只发生在一台服务器上。此服务器似乎错误地要求美国日期:

MM/DD/YYYY

我已经尝试过了

  • 在 web.config 文件中添加“全球化”部分以尝试强制 en-GB 文化
  • 检查“machine.config”的全球化部分(它也显示 en-GB)。
  • 我已检查客户是否要求将 en-GB 作为响应的首选文化。
  • 根据 Eoin 的建议,我还检查了服务器的区域设置(它们的日期设置为正确的 dd/MM/yyyy)。

我不能尝试的事情

我正在使用 MS ASP.NET MVC,它会自动将 HTML 表单数据反序列化为对象,因此我无法手动指定日期格式——例如使用DateTime.Parse(myDateStr, "dd/MM/yyyy") 作为解析是由Microsoft MVC 完成的。

还有什么我可以做的。这是一个内网应用,所有客户都在英国。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-3 datetime-format


    【解决方案1】:

    如果您在全球化部分覆盖当前的文化,请确保指定 UICulture & Culture 选项。

    但是,鉴于您在众多服务器中只有 1 台遇到此问题,我希望服务器本身的配置有所不同。如果您可以以管理员身份登录问题服务器,请检查以下内容(这是 Windows 7,但在 Windows Server 2008 上应该类似)

    控制面板>区域和语言>格式选项卡>格式:“英语(英国)”

    并验证日期是否为 dd/MM/yyyy 格式

    【讨论】:

    • 谢谢,我检查了区域设置,并且它们针对英国 (dd/MM/yyyy) 的设置正确。
    • 您是否尝试过同时指定文化和 UI 文化设置?
    • 是的,我已将两者的值都设置为 en-GB。
    • 我能想到的唯一另一件事是,在您的客户端和服务器(可能是代理)之间有一些东西正在修改请求。你能在服务器上放一个像 fiddler/wireshark 这样的工具来查看实际的 HTTP 请求,并确保它没有请求 en-US。或者,您是否可以与服务器本身(即来自 Localhost)上的站点进行交互以查看它是否仍然存在故障?
    • UICulture 应该只有“en”。
    【解决方案2】:

    你需要做以下两件事。

    1. 在 web.config 中设置文化,如下所示

      uiCulture="en-GB"culture="en-GB" .

    2. 如下所述,将表单方法设置为 POST

      using (Html.BeginForm("DailyReport", "Reports", FormMethod.Post, new { id = "ActivityReport" }))
      

    DailyReport 是您的控制器操作方法,Reports 是控制器,最重要的是 FormMethod.Post 通过将表单方法设置为 POST 将解决你的日期格式问题。

    享受吧!

    【讨论】:

    • 确实你是对的,将表单设置为 POST 而不是 GET 可以解决问题。我不知道为什么这会有所作为......
    • 请参阅下面的评论。 URI 上的数据是文化不变的,因此无论文化如何,URI 对所有用户都具有相同的行为。
    【解决方案3】:

    一个可能的原因是日期/时间格式的系统设置设置为美国。您可以在控制面板的区域和语言中查看。

    【讨论】:

      【解决方案4】:

      您的服务器可能以不同的文化运行。如果你只在你的服务器上运行一个项目,你可以像 Eoin Campbell 刚刚建议的那样改变它的文化

      但如果您的服务器运行其他具有文化意识的项目,您可以像这样强制您的项目线程进入英国模式:

      Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-GB")
      Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-GB")
      

      不影响服务器上运行的所有其他东西

      【讨论】:

      • web.config 的全球化部分不应该这样做吗?如果可能的话,我宁愿不必为了让应用程序在特定服务器上运行而更改代码。
      • 嗯,是的,它应该但似乎由于某种原因这不起作用......所以我认为它可能在某个地方被否决了。
      【解决方案5】:
      Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
      

      【讨论】:

        猜你喜欢
        • 2013-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多