我有一个字符串:
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
我在这里错过了什么?
答案 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);
另外,我建议在任何情况下都使用特定的文化设置而不是null
。在您的示例中,由于null
表示CurrentCulture
解析方法的DateTime
设置,因此您的CurrentCulture
设置;
/
用作DateSeparator
或:
用作TimeSeparator
或GregorianCalendar
用作Calendar
property或AM
或PM
作为PMDesignator
或AMDesignator
属性。对于那些,如果您的字符串和格式完全匹配,则ParseExact
方法会抛出异常甚至。