首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么DateTime.ParseExact()不能使用"M/d/yyyy“来解析"9/1/2009”

为什么DateTime.ParseExact()不能使用"M/d/yyyy“来解析"9/1/2009”
EN

Stack Overflow用户
提问于 2009-09-02 16:07:49
回答 7查看 115.2K关注 0票数 61

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

这是可行的:

代码语言:javascript
复制
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

但我不明白这为什么行不通:

代码语言:javascript
复制
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

日期中没有单词(比如“9月”),而且我知道具体的格式,所以我更喜欢使用ParseExact (我不明白为什么需要CultureInfo )。但是我一直收到可怕的"String as not recognized as a valid DateTime“异常。

谢谢

稍微跟进一下。以下是3种可行的方法:

代码语言:javascript
复制
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个不起作用的例子:

代码语言:javascript
复制
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...意想不到?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-02 16:14:31

我怀疑问题在于格式字符串中的斜杠与数据中的斜杠。这是格式字符串中区分区域性的日期分隔符,最后一个参数为null表示“使用当前区域性”。如果对斜杠(“M”/“d”/“yyyy”)进行转义,或者指定CultureInfo.InvariantCulture,就可以了。

如果任何人有兴趣重现这个:

代码语言:javascript
复制
// 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"));
票数 97
EN

Stack Overflow用户

发布于 2009-09-02 16:20:15

我打赌你的机器的文化不是"en-US“。来自the documentation

如果provider为空引用(在Visual Basic中为Nothing),则使用当前区域性。

如果您当前的区域性不是"en-US",这就解释了为什么它对我有效,但对您无效。当您显式地将区域性指定为"en-US“时,就会起作用。

票数 3
EN

Stack Overflow用户

发布于 2009-09-02 16:15:33

试一试

代码语言:javascript
复制
Date.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1368636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档