我有一个类似这样的字符串:"9/1/2009“。我想(使用C#)将其转换为DateTime对象。
这是可行的:
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));但我不明白这为什么行不通:
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);日期中没有单词(比如“9月”),而且我知道具体的格式,所以我更喜欢使用ParseExact (我不明白为什么需要CultureInfo )。但是我一直收到可怕的"String as not recognized as a valid 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...意想不到?
发布于 2009-09-02 16:14:31
我怀疑问题在于格式字符串中的斜杠与数据中的斜杠。这是格式字符串中区分区域性的日期分隔符,最后一个参数为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"));发布于 2009-09-02 16:20:15
我打赌你的机器的文化不是"en-US“。来自the documentation
如果provider为空引用(在Visual Basic中为Nothing),则使用当前区域性。
如果您当前的区域性不是"en-US",这就解释了为什么它对我有效,但对您无效。当您显式地将区域性指定为"en-US“时,和就会起作用。
发布于 2009-09-02 16:15:33
试一试
Date.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"))https://stackoverflow.com/questions/1368636
复制相似问题