为什么DateTime.ParseExact不适用于美国境外的这个例子?

时间:2016-03-12 12:30:17

标签: c# parsing datetime

我有一个字符串:

var stringDate = "8/19/2016 5:00:00 PM"

我尝试使用:

var dateTime = DateTime.ParseExact(stringDate,"M/d/yyyy h:mm:ss tt", null);

var dateTime = DateTime.ParseExact(stringDate, "M/d/yyyy h:mm:ss tt", 
                                   CultureInfo.Invariant);

var dateTime = DateTime.ParseExact(stringDate,"M/d/yyyy h:mm:ss tt",
                                   CultureInfo.GetCultureInfo("en-us"));

如果机器在美国,它可以正常工作,但对于所有3个选项,从伦敦的机器运行时我会收到以下错误:

  

字符串未被识别为有效的DateTime

我在这里错过了什么?

1 个答案:

答案 0 :(得分:8)

据我所知,您需要使用h specifier代替hh specifier,因为您的小时部分没有单位数值的前导零。

var stringDate = "8/19/2016 5:00:00 PM";
var dateTime = DateTime.ParseExact(stringDate, "M/d/yyyy h:mm:ss tt",
                                   CultureInfo.InvariantCulture);

enter image description here

另外,我建议在任何情况下都使用特定的文化设置而不是null。在您的示例中,由于null表示CurrentCulture解析方法的DateTime设置,因此您的CurrentCulture设置;

对于那些,如果您的字符串和格式完全匹配,则ParseExact方法会抛出异常甚至