Cadena no reconocida como un formato de fecha y hora válido dd / MM / aaaa “

Estoy tratando de convertir mi valor de formato de cadena al tipo de fecha con formato dd/MM/yyyy .

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

Cuál es el problema ? Tiene una segunda anulación que solicita IFormatProvider . ¿Que es esto? ¿ Debo pasar esto también? Si es así, ¿cómo usarlo para este caso?

Editar

¿Cuáles son las diferencias entre Parse y ParseExact ?

Editar 2

Ambas respuestas de Slaks y Sam están trabajando para mí, actualmente el usuario está dando la información, pero estoy seguro de que son válidas usando maskTextbox.

¿Qué respuesta es mejor teniendo en cuenta todos los aspectos como tipo de seguridad, rendimiento o algo que te apetezca?

Use DateTime.ParseExact .

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

ParseExact llamar a ParseExact , que analiza una fecha que coincide exactamente con el formato que proporciona.

Por ejemplo:

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

El parámetro IFormatProvider especifica la cultura que se utilizará para analizar la fecha.
A menos que su cadena provenga del usuario, debe pasar CultureInfo.InvariantCulture .
Si la cadena proviene del usuario, debe pasar CultureInfo.CurrentCulture , que utilizará la configuración que el usuario especificó en Opciones regionales en el Panel de control.

El análisis de una representación en cadena de un DateTime es algo complicado porque las diferentes culturas tienen diferentes formatos de fecha. .Net conoce estos formatos de fecha y los saca de su cultura actual ( System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat ) cuando llama a DateTime.Parse(this.Text) ;

Por ejemplo, la cadena “22/11/2009” no coincide con ShortDatePattern para Estados Unidos (en-US), pero sí coincide con Francia (fr-FR).

Ahora puede llamar a DateTime.ParseExact y pasar la cadena de formato exacta que está esperando, o puede pasar una cultura apropiada a DateTime.Parse para analizar la fecha.

Por ejemplo, esto analizará su fecha correctamente:

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

Por supuesto, no debería elegir al azar a Francia, sino algo apropiado a sus necesidades.

Lo que necesita saber es qué System.Threading.Thread.CurrentThread.CurrentCulture está establecido en, y si / por qué difiere de lo que esperaba.

Aunque las soluciones anteriores son efectivas, también puede modificar el archivo webconfig con lo siguiente …

      

Ref .: formato de fecha y hora diferente en la máquina local en comparación con la máquina de producción

Es posible que deba especificar la cultura para ese formato de fecha específico como en:

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

Para más detalles ir aquí:

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

usa esto para convertir cadena a 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; } 

Después de pasar mucho tiempo, he resuelto el problema

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

Con base en esta referencia , el siguiente enfoque funcionó para mí:

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

Al igual que alguien mencionado anteriormente, puede enviarlo como un parámetro de cadena, pero debe tener este formato: ‘20130121’, por ejemplo, y puede convertirlo a ese formato, tomándolo directamente del control. Así que lo obtendrás, por ejemplo, de un cuadro de texto como:

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

para convertirlo a: ‘20130121’ que usa:

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

para que SQL pueda convertirlo y ponerlo en su base de datos.

Puedes usar también

 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 

Funcionó para mí debajo del código:

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

Espacio de nombre

 using System.Globalization; 

Una manera fácil sin referencias externas:

 public string FormatDate(string date, string format) { try { return DateTime.Parse(date).ToString(format); } catch (FormatException) { return string.Empty; } } 

Cambiar manualmente:

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

Desde el 22/11/2015 se convertirá en 22/11/2015