2010-10-05 9 views
7

Estoy analizando una cadena para convertirla en DateTime. Me estoy haciendo en algunos casos un error:DateTime.Parse: excepción al cambiar de cultura

String was not recognized as a valid DateTime. 

Estoy consiguiendo este error sólo si ejecuto la aplicación desde un ordenador situado en un país diferente al de los Estados Unidos. Lo que veo en la cadena es 09/20/2010 14:11 y en este caso recibo una excepción. Si tengo un valor como: 10/05/2010 12:54, no recibo una excepción. Supongo que es el hecho de que el día es 20 y que esta computadora está en Europa, por lo que cree que 20 es el mes. El problema es fuerzo que ser en-us:

CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy hh:mm", new CultureInfo("en-US")); 

Debido a que estoy recibiendo la excepción supongo que este es el enfoque correcto.

¿Alguna idea de cómo analizar una cadena de una manera que funciona sin importar la cultura que estoy ejecutando en la máquina?

+0

Si sabe que el formato siempre será así, podría usar DateTime.Parse (value, CultureInfo.InvariantCulture); En términos de formato de fecha y hora, InvariantCulture es más o menos equivalente a en-US. Por cierto, si lo analiza de esta manera, .Net no podrá determinar la zona horaria y realmente tratará su DateTime como "local no especificado", lo que podría generar errores. Si sabe que la fuente está en UTC, use esto: DateTime.Parse (value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); –

Respuesta

10

Debe usar "HH: mm" en lugar de "hh: mm" - "HH" es para reloj de 24 horas; "hh" es para un reloj de 12 horas. Entonces 14 no es un valor válido para "hh".

Esperaría ver el mismo problema incluso en una máquina de los Estados Unidos ... ¿acaso solo recibía antes de la 1pm veces en sus máquinas de EE. UU. Debido a las diferencias de huso horario?

+0

Creo que ese era el problema. Ahora funciona. – tony

+0

Muchas gracias por la pronta ayuda Tony – tony

Cuestiones relacionadas