Error de cadena a DateTime por idioma C#
El error de cadena no válida para ser convertida a DateTime en C# es muy común al utilizar diferentes idiomas en las fechas.
Error de conversión cadena a DateTime
Al intentar convertir una cadena con una fecha en formato inglés (25/07/2019) en una aplicación que tiene definido el idioma español, se genera un error.
El formato no se reconoce como una fecha valida, el problema es que la fecha está en inglés.
Por ejemplo, tenemos estas dos variables con las fechas en inglés y español.
string fechaEn = "07/25/2019 13:00:00";//Ingles
string fechaEs = "25/07/2019 13:00:00";//español
Al aplicar la conversión en las dos fechas mediante convert, obtenemos los siguientes resultados.
DateTime fechaEng = Convert.ToDateTime(fechaEn);
//Error: No se puede reconocer la cadena como valor DateTime valido.
DateTime fechaEsp = Convert.ToDateTime(fechaEs);
//Conversión correcto
Solución del error
Ya que tenemos identificado este error, podemos solucionarlo enviando un parámetro más al método ToDateTime.
El método ToDateTime de la clase Covert puede recibir más parámetros, entre ellos uno que valide la fecha.
A la conversión de la fecha en ingles agreguemos el parámetro de la siguiente manera.
string fechaCadena = "07/25/2019 13:00:00";
DateTime fecha = Convert.ToDateTime(fechaCadena, CultureInfo.InvariantCulture);
Con CultureInfo.InvariantCulture se realiza la conversión de la fecha independientemente del idioma. Al utilizarlo en el ejemplo anterior se puede evitar el error de conversión.
Podría interesarte Método Parse o clase Convert C#
El erro se soluciona siempre que la fecha sea válida, si se colocan más días o meses, por ejemplo, se generará otro error.