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

leo*_*ora 3 c# datetime parsing

我有一个字符串:

var stringDate = "8/19/2016 5:00:00 PM"
Run Code Online (Sandbox Code Playgroud)

我尝试使用:

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

要么

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

要么

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

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

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

我在这里想念的是什么?

Son*_*nül 8

据我所知,您需要使用h说明符而不是说明hh符,因为您的小时部分没有单个数字值的前导零.

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

在此输入图像描述

此外,我建议使用特定的文化设置,而不是null任何情况.在你的榜样,因为null手段CurrentCulture用于设置DateTime解析方法,你的CurrentCulture设置;

对于那些,即使您的字符串和格式完全匹配,您的ParseExact方法也会抛出异常.