System.FormatException “String was not recognized as a valid datetime”

Escrito por: Ivanov Cepeda

Si usted tiene una aplicación basada en el .net framework 4.0, utiliza como sistema operativo Windows 2003, Windows 2008 o Windows 2008 R2 y la cultura que utiliza es Español o Italiano, puede sufrir de un problema que ha sido detectado en las funciones que ayudan a crear el tipo de datos DateTime a través de las funciones Parse o TryParse o usando Convert.ToDateTime(string)

Este problema ocurre únicamente la versión 4.0 del framework y existe un hotfix para este problema en particular que necesitara ser aplicado para el framework 4.0, adicional a aplicar el hotfix necesitara implementar un cambio en la configuración de la aplicación tal y como se detalla en la información del KB 2733944. Actualmente el framework 4.5 en Windows 8 y Windows 2012 no poseen este problema, sin embargo no recomendamos hacer un upgrade al framework 4.5 en servidores Windows 2008 o Windows 2008 R2 donde usted presente este problema ya que el error aparecerá nuevamente.

Como comprobar si tiene el problema?

Si su aplicación está basada en el framework 4.0 verifique si usted utiliza las funciones:

DateTime.Parse(string) https://msdn.microsoft.com/en-us/library/1k1skd40(v=vs.100).aspx

DateTime.TryParse (string, DateTime) https://msdn.microsoft.com/en-us/library/ch92fbc1(v=vs.100).aspx

Convert.ToDateTime (string) https://msdn.microsoft.com/en-us/library/xhz1w05e(v=vs.100).aspx

Si usted utiliza alguna de estas funciones y utiliza fechas en donde el nombre del mes esta abreviado de forma tal que se utilizan las primeras 3 letras, ejemplo: 03/Mar/2012, es muy probable que usted vea que la fecha no fue correctamente convertida o más probablemente verá la siguiente excepción ocurrir al transformar un string que contiene una fecha del mes de Marzo en un tipo de dato DateTime:

clip_image002

El hotfix que soluciona este problema para el framework 4.0 no es público por lo que necesitara solicitar el hotfix a través de un incidente de soporte, para más información de cómo crear un incidente contacte a su gerente de cuenta o visite https://support.microsoft.com/contactus/?ws=support.

Una de las características de este hotfix es que necesitara incluir una configuración especial para que el hotfix soluciones el problema, debera agregar en su archivo de configuración el siguiente valor en la sección runtime:

 <configuration>
   <runtime>
      <DateTime_NetFX35ParseMode enabled="true" />
   </runtime>
</configuration>

 

FAQ:

¿Si instalo el framework 4.5 en el servidor donde ocurre el problema se resolverá el error?

R/. No, debe instalar el hotfix y adecuar el archivo de configuración para su aplicación para realizar la conversión de fechas usando el algoritmo que se usaba en versiones anteriores del framework que no producían el problema.

¿Mi sistema operativo es Windows 8, también ocurre el problema en este tipo de sistema operativo?

R/. No, Windows 8 tiene el framework 4.5 preinstalado de manera que no es necesario realizar ningún tipo de update o configuración adicional, si usted usa la configuracion mencionada en el hotfix sera ignorada ya que no es necesaria.

¿Tengo una aplicación que usa el Framework 4.0 y alguna de las funciones mencionadas, pero no se ha reportado ningún problema, como puedo verificar si el problema sucede?

R/. Este problema se manifiesta únicamente con fechas que tengan el mes de Marzo, y que utilicen un formato en donde el Mes es abreviado en tres letras. Intente validar si su aplicación puede manejar fechas del mes de marzo adecuadamente, de ser así no necesita aplicar esta actualización.

¿Después de resolver el problema actualizamos al framework 4.5 el servidor y el problema volvió a ocurrir, como se puede resolver este problema después de la actualización?

R/. Por ahora no existe una solución si usted hace un upgrade del framework 4.0 al framework 4.5 en un servidor Windows 2008 o Windows 2008 R2, necesitara remover el framework 4.5, este removerá tambien el framework 4.0 ya que al instalar el framework 4.5 se sobrescribe el framework 4.0 y se actualiza, una vez remueva el framework 4.5 instale el framework 4.0 y aplique el hotfix KB 2733944 nuevamente.

El grupo de producto está enterado de que el problema sucede nuevamente si se hace un upgrade del framework 4.0 al framework 4.5 en Windows 2008 y Windows 2008 R2 y están revisando actualmente el problema.