字符串不被识别为有效的日期时间“格式dd/mm/yyy”

字符串不被识别为有效的日期时间“格式dd/mm/yyy”

我正在尝试用格式将我的字符串格式化值转换为日期类型。dd/MM/yyyy.

this.Text="22/11/2009";DateTime date = DateTime.Parse(this.Text);

有什么问题吗?它有第二个要求IFormatProvider..这是什么?我也要通过这个吗?如果是的话,这个案子该怎么用呢?

编辑

.之间有什么区别?ParseParseExact?

编辑2

Slaks和Sam的两个答案都是为我工作的,目前用户正在提供输入,但我将向您保证,通过使用maskTextbox,它们是有效的。

哪一个答案更好地考虑到所有方面,比如类型安全、性能或者你感觉到的东西。


慕的地6264312
浏览 1159回答 3
3回答

德玛西亚99

你需要打电话ParseExact,它解析的日期与您提供的格式完全匹配。例如:DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);这个IFormatProvider参数指定用于解析日期的区域性。除非您的字符串来自用户,否则应传递CultureInfo.InvariantCulture.如果字符串确实来自用户,则应传递CultureInfo.CurrentCulture,它将使用用户在“控制面板”中的“区域选项”中指定的设置。

饮歌长啸

解析日期时间的字符串表示是一件棘手的事情,因为不同的区域性有不同的日期格式。NET知道这些日期格式,并将它们从当前区域性中提取出来(System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat)当你打电话的时候DateTime.Parse(this.Text);例如,字符串“22/11/2009”与ShtDatePattern对于美国(en-US),但它确实与法国(fr-fr)相匹配。现在,你要么打电话DateTime.ParseExact并传递您所期望的确切格式字符串,或者可以将适当的区域性传递给DateTime.Parse解析日期。例如,这将正确地解析您的日期:DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") );当然,你不应该只是随便选择法国,而是适合你的需要。你需要弄清楚的是System.Threading.Thread.CurrentThread.CurrentCulture设置为,以及它是否/为什么与您预期的不同。
打开App,查看更多内容
随时随地看视频慕课网APP