首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >字符串未识别为有效的DateTime“格式dd/MM/yyyy”

字符串未识别为有效的DateTime“格式dd/MM/yyyy”
EN

Stack Overflow用户
提问于 2010-02-03 23:24:30
回答 13查看 823.6K关注 0票数 194

我正在尝试将字符串格式值转换为dd/MM/yyyy格式的date类型。

this.Text="22/11/2009";

DateTime date = DateTime.Parse(this.Text);

问题出在哪里?它有一个要求IFormatProvider的第二个覆盖。这是什么?我也需要通过这个吗?如果是,在这种情况下如何使用它?

编辑

ParseParseExact之间的区别是什么

编辑2

Slaks和Sam的答案对我来说都是有效的,目前用户正在给出输入,但这将通过使用maskTextbox向我保证它们是有效的。

综合考虑类型安全、性能或您想要的其他方面,哪个答案更好

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-02-03 23:27:41

使用DateTime.ParseExact

this.Text="22/11/2009";

DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);
票数 286
EN

Stack Overflow用户

发布于 2010-02-03 23:28:21

您需要调用ParseExact,它会解析与您提供的格式完全匹配的日期。

例如:

DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);

IFormatProvider参数指定用于分析日期的区域性。

除非字符串来自用户,否则应该传递CultureInfo.InvariantCulture

如果字符串确实来自用户,则应传递CultureInfo.CurrentCulture,它将使用用户在“控制面板”的“区域选项”中指定的设置。

票数 49
EN

Stack Overflow用户

发布于 2010-02-03 23:56:16

解析DateTime的字符串表示是一件棘手的事情,因为不同的区域性具有不同的日期格式。.Net知道这些日期格式,并在您调用DateTime.Parse(this.Text)时从当前区域性(System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat)中提取它们;

例如,字符串"22/11/2009“与美国(en-US)的ShortDatePattern不匹配,但与法国(fr-FR)匹配。

现在,您可以调用DateTime.ParseExact并传入所需的确切格式字符串,也可以将适当的区域性传递给DateTime.Parse以解析日期。

例如,这将正确解析您的日期:

DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") );

当然,你不应该随意选择法国,而应该选择适合你需要的。

您需要弄清楚的是System.Threading.Thread.CurrentThread.CurrentCulture设置为什么,以及它是否/为什么与您预期的不同。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2193012

复制
相关文章

相似问题

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