我有一个看起来像这样的字符串:“9/1/2009”。我想将其转换为DateTime对象(使用C#)。

这有效:

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

但是我不明白为什么这行不通:
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

日期中没有字(例如“September”),我知 Prop 体的格式,所以我宁愿使用ParseExact(并且我不明白为什么需要CultureInfo)。但是我不断收到可怕的“字符串未被识别为有效的DateTime”异常。

谢谢

稍作跟进。这是3种有效的方法:
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一起使用...

最佳答案

我怀疑问题是格式字符串中的斜杠与数据中的斜杠。这是格式字符串中区分区域性的日期分隔符,最后一个参数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"));

关于.net - 为什么DateTime.ParseExact()无法使用 “9/1/2009”解析 “M/d/yyyy”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1368636/

10-12 07:40
查看更多