string未被识别为有效的date时间“格式dd / MM / yyyy”

我试图将我的string格式的值转换为格式dd/MM/yyyydatetypes。

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

问题是什么 ? 它有一个要求IFormatProvider的第二个覆盖。 这是什么? 我还需要通过这个吗? 如果是的话,如何使用它呢?

编辑

ParseParseExact什么区别?

编辑2

Slaks和Sam的答案都在为我工作,目前用户正在给input,但这将由我确定,他们是有效的,通过使用maskTextbox。

考虑到types安全,性能或者你喜欢的东西等方面,哪个答案更好

使用DateTime.ParseExact

 this.Text="22/11/2009"; DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null); 

您需要调用ParseExactParseExactparsing与您提供的格式完全匹配的date。

例如:

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

IFormatProvider参数指定用于parsingdate的IFormatProvider
除非你的string来自用户,你应该通过CultureInfo.InvariantCulture
如果string确实来自用户,则应传递CultureInfo.CurrentCulture ,它将使用用户在“控制面板”中的“区域选项”中指定的设置。

parsingdate时间的string表示是一件棘手的事情,因为不同的文化有不同的date格式。 .net知道这些date格式,并从当前的文化( System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat ),当您调用DateTime.Parse(this.Text) ;

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

现在,您可以调用DateTime.ParseExact并传入您期望的确切格式string,也可以将适当的文化传递给DateTime.Parse以parsingdate。

例如,这将正确parsing你的date:

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

当然,你不应该随便select法国,而是适合你的需求。

你需要弄清楚什么是System.Threading.Thread.CurrentThread.CurrentCulture设置,如果/为什么它不同于你的期望。

虽然上面的解决scheme是有效的,你也可以用下面的方法修改webconfig文件…

 <configuration> <system.web> <globalization culture="en-GB"/> </system.web> </configuration> 

参考: 与生产机器相比,本地机器上的date时间格式不同

您可能需要指定该特定date格式的文化,如下所示:

  Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); //dd/MM/yyyy this.Text="22/11/2009"; DateTime date = DateTime.Parse(this.Text); 

欲了解更多细节,请点击

http://msdn.microsoft.com/en-us/library/5hh873ya.aspx

用这个将string转换为datetime:

 Datetime DT = DateTime.ParseExact(STRDATE,"dd/MM/yyyy",System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat) 
 private DateTime ConvertToDateTime(string strDateTime) { DateTime dtFinaldate; string sDateTime; try { dtFinaldate = Convert.ToDateTime(strDateTime); } catch (Exception e) { string[] sDate = strDateTime.Split('/'); sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2]; dtFinaldate = Convert.ToDateTime(sDateTime); } return dtFinaldate; } 

就像上面说的一样,你可以把它作为一个string参数发送,但是它必须有这样的格式:例如“20130121”,你可以把它转换成直接从控件中获取的格式。 所以你会从例如下面的文本框中得到它:

 date = datetextbox.text; // date is going to be something like: "2013-01-21 12:00:00am" 

将其转换为:您使用的“20130121”:

 date = date.Substring(6, 4) + date.Substring(3, 2) + date.Substring(0, 2); 

以便SQL可以将其转换并放入您的数据库中。

花了很多时间后,我已经解决了这个问题

  string strDate = PreocessDate(data); string[] dateString = strDate.Split('/'); DateTime enter_date = Convert.ToDateTime(dateString[1]+"/"+dateString[0]+"/"+dateString[2]); 

基于这个参考 ,下一个方法为我工作:

 // eg format = "dd/MM/yyyy", dateString = "10/07/2017" var formatInfo = new DateTimeFormatInfo() { ShortDatePattern = format }; date = Convert.ToDateTime(dateString, formatInfo); 

你也可以用

 this.Text = "22112009"; DateTime newDateTime = new DateTime(Convert.ToInt32(this.Text.Substring(4, 4)), // Year Convert.ToInt32(this.Text.Substring(2,2)), // Month Convert.ToInt32(this.Text.Substring(0,2)));// Day 

代码如下:

 DateTime date = DateTime.Parse(this.Text, CultureInfo.CreateSpecificCulture("fr-FR")); 

命名空间

 using System.Globalization; 

手动更改:

 string s = date.Substring(3, 2) +"/" + date.Substring(0, 2) + "/" + date.Substring(6, 4); 

2015年11月22日起,酒店将在22/11/2015进行改build