我正在尝试在美国服务器上解析此日期时间,但它不起作用:
string foo = "13 Lug 2013 14:15";
DateTime arrivalDateConfirmed = DateTime.ParseExact(foo, "dd MMM yyyy HH:mm", new CultureInfo("it-IT"));
在我的意大利测试机上工作。
答案 0 :(得分:3)
尝试转义分号:
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
答案 1 :(得分:-1)
您需要将当前主题的文化设置为意大利语,因此它知道解析意大利语日期而不是当前设置的美国日期。您也不需要使用ParseExact,只需使用Parse()。完成文化敏感代码后,请务必将其重新设置。
string foo = "13 Lug 2013 14:15";
Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT");
DateTime.Parse(foo);
Console.WriteLine(foo);