2012-08-01 15 views
11

Estoy tratando de analizar una cadena de fecha en una variable DateTime. Descubrí que ParseExact es la manera de hacerlo, pero trato de obtener el error:DateTime.ParseExact da String no se reconoció como un DateTime válido.

Cadena no reconocida como fecha y hora válida.

string timeFormat = "dd-MM-yyyy hh:mm:ss"; 
DateTime startDate = DateTime.ParseExact(reader["startdate"].ToString(), timeFormat, CultureInfo.InvariantCulture); 
DateTime nextDate = DateTime.ParseExact(reader["nextdate"].ToString(), timeFormat, null); 

He intentado tanto con null (que pasa a trabajar en otra página), y la CultureInfo.InvariantCulture.

reader["startdate"].ToString() de salida: 01-08-2012 15:39:09

y

reader["nextdate"].ToString() de salida: 01-08-2012 15:39:09

creo que debería funcionar, pero no es así

Alguien tiene una idea de lo que está mal? :)

Respuesta

35

Está usando hh en su cadena de formato. Es un campo de "hora del día" de 12 horas. El valor 15 no está dentro del rango ...

En su lugar, quiere HH, que es el especificador de 24 horas.

Consulte el MSDN custom date and time format strings documentation para obtener más información.

+0

Por supuesto. Entonces, cuando dije que funcionaba en otra página, tuve suerte de que fuera antes de las 12 la última vez que probé. Pero esto funciona ¡Muchas gracias! :) – DesignMonkeyDK

+0

Y bastante rápido respuesta por cierto. Ni siquiera puedo aceptar la respuesta :) :) – DesignMonkeyDK

+0

oh dios, gracias por esto ... me tomó medio día darme cuenta de esto – Christian

0

probar esto funciona

DateTime.ParseExact("01-08-2012 15:36:25", "dd-MM-yyyy HH:mm:ss", null); 
+0

Sí. Fue justo el hh que necesitaba ser HH :) – DesignMonkeyDK

+0

sí el error vino del formato de error de hora, –

1

Lo más probable debido a la diferencia entre su entorno local del servidor y la configuración regional de IU

Uno más fácil método será para especificar los detalles de la globalización en la web. config

como

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

OR con más detalle

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB" /> 

Pero asegurarse de que esta costumbre choque con su aplicación en general

+0

Esto solucionó mi problema, a pesar de que estaba especificando la cultura DateTime.ParseExact (stringToConvert, format, new CultureInfo ("en-NZ")); y me aseguré de que la configuración regional fuera la misma tanto en la máquina dev como en el servidor prod: funcionaría localmente pero no en prod. –

Cuestiones relacionadas