我有一个看起来像这样的字符串:“9/1/2009”。我想将它转换为DateTime对象(使用C#)。
这有效:
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));
但我不明白为什么这不起作用:
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);
日期中没有单词(比如“九月”),我知道具体的格式,所以我宁愿使用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 ......意外?
答案 0 :(得分:91)
我怀疑问题是格式字符串中的斜杠与数据中的斜杠。这是格式字符串中对文化敏感的日期分隔符,最终参数为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"));
答案 1 :(得分:3)
我敢打赌你的机器文化不是“en-US”。来自the documentation:
如果 provider 是空引用(在Visual Basic中为Nothing),则使用当前区域性。
如果您当前的文化不是“en-US”,这可以解释为什么它对我有用但不适合您和在您明确指定文化为“en- US”。
答案 2 :(得分:2)
尝试
Date.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"))
答案 3 :(得分:0)
试试这个
provider = new CultureInfo("en-US");
DateTime.ParseExact("9/1/2009", "M/d/yyyy", provider);
再见。
答案 4 :(得分:-1)
我在XP上尝试了它,如果将PC设置为国际时间yyyy-M-d则无效。在行上放置一个断点,在处理之前更改日期字符串以使用' - '代替'/',你会发现它有效。无论您是否拥有CultureInfo都没有区别。 似乎很奇怪,只能指定一个经过验证的格式才能忽略分隔符。
答案 5 :(得分:-2)
尝试:
在网络配置文件中配置
<system.web>
<globalization culture="ja-JP" uiCulture="zh-HK" />
</system.web>
例如:DateTime dt = DateTime.ParseExact(&#34; 08/21/2013&#34;,&#34; MM / dd / yyyy&#34;,null);
答案 6 :(得分:-3)
将DateTimePicker Format属性设置为自定义,将CustomFormat
属性设置为M/dd/yyyy
。