【问题标题】:Parsing Italian Date on USA server在美国服务器上解析意大利日期
【发布时间】:2013-07-24 00:20:05
【问题描述】:

我试图在美国服务器上解析这个日期时间,但它不起作用:

string foo = "13 Lug 2013 14:15";
DateTime arrivalDateConfirmed = DateTime.ParseExact(foo, "dd MMM yyyy HH:mm", new CultureInfo("it-IT"));

在我的意大利测试机上工作。

【问题讨论】:

  • “它不起作用”不是一个充分的诊断声明。 如何它不起作用?有例外吗?是否返回 DateTime 值?返回值与您的预期有何不同?
  • 我收到此错误:字符串未被识别为有效日期时间
  • 你的例子对我有用。

标签: c# parsing datetime culture


【解决方案1】:

尝试转义分号:

DateTime arrivalDateConfirmed = DateTime.ParseExact(foo, "dd MMM yyyy HH\\:mm", new CultureInfo("it-IT"));

您可以在此处找到更多信息:http://madskristensen.net/post/Quirk-in-the-DateTime-class.aspx

解释是“:”字符被认为是自定义格式说明符而不是文字字符,在这种情况下是时间分隔符。解析器将尝试将此分隔符转换为指定的文化。在这种情况下,it-IT 的时间分隔符是“.”。特点。如果您不希望将自定义格式说明符字符转换为等效的语言环境,则应转义它们,如下所述:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#escape

【讨论】:

  • 感谢您的解释,现在 ParseExact 工作。问题是在意大利语言文化中,时间分隔符是“:”而不是“。”如我的 Windows 系统时钟所示。所以我认为这是文化信息中的一个BUG。谢谢!
【解决方案2】:

您需要将当前线程的文化设置为意大利语,以便它知道解析意大利日期而不是当前设置的美国日期。您也不需要使用 ParseExact,只需使用 Parse()。完成对文化敏感的代码后,请务必将其重新设置。

string foo = "13 Lug 2013 14:15";
Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT");
DateTime.Parse(foo);
Console.WriteLine(foo);

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2015-02-02
    相关资源
    最近更新 更多