【问题标题】:DateTime.TryParse to other culture infoDateTime.TryParse 到其他文化信息
【发布时间】:2015-08-28 09:50:18
【问题描述】:

我目前有一个时间报告项目,您可以在其中输入日期并报告该日期的时间,(所有日期都以瑞典格式显示并发送回后端等yy-mm-dd) 但是,如果我的计算机上有其他文化信息,例如 dd-mm-yyyy,它会解析错误的日期并且无法正常工作。

这是我的代码

DateTime reportDate;
if (!DateTime.TryParse(result, out reportDate))
{
    ModelState.AddModelError("Date", "Felaktikt datum");
}

这将获取我的yy-mm-dd 并将其解析为dd-mm-yyyy,因为这是我的计算机设置的。

【问题讨论】:

  • "所有日期都以瑞典格式显示并发送回后端等 yy-mm-dd" - 为什么?我建议您查看DateTime.TryParseExact 并指定那里的文化,如果您真的需要的话 - 但是使用人类文化日期格式进行机器对机器通信是一个非常糟糕的 ida。
  • DateTime.TryParseExact(result, formats, new CultureInfo("sv-SE""), DateTimeStyles.None, out reportDate)
  • 因为这是我被告知要做的,所以日期应该显示为 yy-mm-dd。

标签: c# date


【解决方案1】:

您可以像这样指定瑞典文化:

DateTime reportDate;

if (!DateTime.TryParse(result,
    System.Globalization.CultureInfo.GetCultureInfo("sv-SE"),
    System.Globalization.DateTimeStyles.None, out reportDate))
{
    ModelState.AddModelError("Date", "Felaktikt datum");
}

【讨论】:

  • reportDate 仍然保持 dd-mm-yyyy。
  • reportDate 是解析后的日期,所以你可以随意格式化。上面的代码将解析像“15-08-28”这样的日期并将其转换为正确的日期时间。
  • 通过添加解决它 Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE");
  • @JoakimCarlsson 不相关 - 您只是更改了默认情况下的 格式化 方式,这与解析无关。 DateTime 不包含任何格式信息。
【解决方案2】:

DateTime.TryParse 有一个额外的 2 个参数,第二个是 IFormatProvider,您可以指定您希望它代表哪种文化。在您的情况下,它是瑞典的 sv-SE

DateTime.TryParse(
    result,
    new CultureInfo("sv-SE"),
    DateTimeStyles.None,
    out reportDate
);

【讨论】:

    【解决方案3】:

    你可以试试 TryParse 方法的第二个重载

    DateTime.TryParse(result, CultureInfo.CreateSpecificCulture("sv-SE"), DateTimeStyles.None, out reportDate )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多