为什么DateTime.ParseExact()不能用“M / d / yyyy”parsing“9/1/2009”

我有一个如下所示的string:“9/1/2009”。 我想将其转换为DateTime对象(使用C#)。

这工作:

DateTime.Parse("9/1/2009", new CultureInfo("en-US")); 

但我不明白为什么这不起作用:

 DateTime.ParseExact("9/1/2009", "M/d/yyyy", null); 

在date(如“九月”)没有字,我知道具体的格式,所以我宁愿使用ParseExact(我不明白为什么需要CultureInfo)。 但我不断得到可怕的“string未被识别为有效的date时间”exception。

谢谢

稍微跟进一下。 这里有三种方法可以工作:

 DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", null); DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture); DateTime.Parse("9/1/2009", new CultureInfo("en-US")); 

这里有3个不起作用的:

 DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.CurrentCulture); DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US")); DateTime.ParseExact("9/1/2009", "M/d/yyyy", null); 

所以,Parse()适用于“en-US”,但不适用于ParseExact …意外?

我怀疑问题是格式string与数据中的斜杠相反。 这是格式string中文化敏感的date分隔符,最后一个参数为null表示“使用当前文化”。 如果您要么跳过斜杠(“M”/“d”/“yyyy”), 要么指定CultureInfo.InvariantCulture ,这样可以。

如果有人有兴趣重现这一点:

 // Works DateTime dt = DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", new CultureInfo("de-DE")); // Works DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US")); // Works DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture); // Fails DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("de-DE")); 

我敢打赌你的机器的文化不是“en-US”。 从文档 :

如果提供程序是空引用(在Visual Basic中为Nothing),则使用当前文化。

如果你现在的文化不是“en-US”,这就解释了为什么它适合我,但是不适合你, 并且在你明确指定文化是“en-US”时工作。

尝试

 Date.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US")) 

尝试这个

 provider = new CultureInfo("en-US"); DateTime.ParseExact("9/1/2009", "M/d/yyyy", provider); 

再见。

我在XP上试了一下,如果电脑设置为国际时间yyyy-Md,它也不起作用。 在行上放置一个断点,并在处理之前将datestring改为使用' – '替代'/',你会发现它的工作原理。 不pipe你是否有文化信息,都没有区别。 似乎奇怪的是能够指定一个只有格式被忽略的分隔符。

试试:

在webconfiguration文件中configuration

<system.web> <globalization culture="ja-JP" uiCulture="zh-HK" /> </system.web>

例如:DateTime dt = DateTime.ParseExact(“08/21/2013”​​,“MM / dd / yyyy”,null);

refurl: http : //support.microsoft.com/kb/306162/

将DateTimePicker的Format属性设置为自定义,将CustomFormat属性设置为M/dd/yyyy