我正在尝试将字符串格式值转换为dd/MM/yyyy
格式的date类型。
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
问题出在哪里?它有一个要求IFormatProvider
的第二个覆盖。这是什么?我也需要通过这个吗?如果是,在这种情况下如何使用它?
编辑
Parse
和ParseExact
之间的区别是什么
编辑2
Slaks和Sam的答案对我来说都是有效的,目前用户正在给出输入,但这将通过使用maskTextbox向我保证它们是有效的。
综合考虑类型安全、性能或您想要的其他方面,哪个答案更好
发布于 2010-02-03 23:27:41
使用DateTime.ParseExact
。
this.Text="22/11/2009";
DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);
发布于 2010-02-03 23:28:21
您需要调用ParseExact
,它会解析与您提供的格式完全匹配的日期。
例如:
DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
IFormatProvider
参数指定用于分析日期的区域性。
除非字符串来自用户,否则应该传递CultureInfo.InvariantCulture
。
如果字符串确实来自用户,则应传递CultureInfo.CurrentCulture
,它将使用用户在“控制面板”的“区域选项”中指定的设置。
发布于 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
设置为什么,以及它是否/为什么与您预期的不同。
https://stackoverflow.com/questions/2193012
复制相似问题