【问题标题】:c# and Date Culture Problemsc# 和日期文化问题
【发布时间】:2010-10-11 11:30:44
【问题描述】:

我编写了一个 asp.net 应用程序,我的一个回发例程只是将用户提交的表单数据保存到 sql 2005 db。一切在我的开发机器上运行良好,但是当我部署到实时站点时,我从我的解析日期检查器中得到无效的日期。

基本上它期望在现场机器上使用美国日期格式,但这不是我想要的。用户需要能够以 dd/MM/yyyy 格式输入。因此,像 21/10/2009 这样的有效日期会在实时服务器上返回错误,但不会在我的开发机器上返回错误。下面是引发异常的代码。

DateTime dt;
dt = DateTime.Parse(sdate);  
//sdate in GB dd/MM/yyyy format

是否可以强制解析例程期望日期为 dd/MM/yyyy 格式?

【问题讨论】:

    标签: c# .net asp.net datetime cultureinfo


    【解决方案1】:

    是的,ParseExact 会按照 Matt 所说的那样做。

    代码类似于:

    dt  = DateTime.ParseExact(sdate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
    

    【讨论】:

      【解决方案2】:

      这样做:

          System.Globalization.CultureInfo cultureinfo = 
              new System.Globalization.CultureInfo("en-gb");
          DateTime dt = DateTime.Parse("13/12/2009", cultureinfo);
      

      【讨论】:

      • 怎么样,你把“12/12/9999”放在理论上是一个有效的日期,但从人类的角度来看,它是无效的,所以你放在那里的代码永远不会失败目前是 2012 年..我们从未达到 DateTime.MaxValue 的 9999
      【解决方案3】:

      另一个选项是在 web.config 文件中指定您希望使用的文化:

      <system.web>
          ...
          <globalization 
              culture="da-DK" 
              uiCulture="da-DK" requestEncoding="utf-8" responseEncoding="utf-8"
          />
      </system.web>
      

      【讨论】:

        【解决方案4】:

        您可以使用DateTime.ParseExact 指定预期格式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-17
          • 2013-06-03
          • 1970-01-01
          相关资源
          最近更新 更多