【发布时间】:2010-11-25 00:20:51
【问题描述】:
我有一个如下所示的字符串:“9/1/2009”。我想将其转换为 DateTime 对象(使用 C#)。
这行得通:
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));
但我不明白为什么这不起作用:
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);
日期中没有单词(如“September”),而且我知道具体格式,所以我宁愿使用 ParseExact(我不明白为什么需要 CultureInfo)。但我不断收到可怕的“字符串未被识别为有效的日期时间”异常。
谢谢
稍作跟进。以下是 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... 出乎意料?
【问题讨论】:
-
您使用的是什么版本的 .NET?当我在 Win7 上的 PowerShell v2 中执行上面的第二行时,它工作得很好。
-
我在 xp 上使用 .net 3.5。默认区域性为 en-us。
-
在字符串
"M/d/yyyy"中,每个斜线/都替换为culture.DateTimeFormat.DateSeparator字符串。当您将null作为格式提供者时,将使用当前文化。现在取决于当前文化是否有"/"或其他字符串(如"-"或".")作为其DateSeparator。
标签: .net datetime parsing cultureinfo