2010-11-16 15 views
6

que estoy tratando de analizar lo siguiente String en un objeto DateTime en C#:DateTime.ParseExact no funciona en absoluto, ¿por qué?

DateTime.ParseExact("20101108 230125", "yyyyMMdd hhmmss", null) 

aunque el valor parece correcto el método ParseExact me sigue dando el siguiente:

cadena no fue reconocido como un DateTime válido.

¿Alguien puede decirme por qué y cómo puedo analizar la cadena anterior sin tener que hacerlo de forma manual? ¿No se supone que ParseExact es para este tipo de ocasión?

Respuesta

21

Tienes el formato para la hora equivocada, debe estar en mayúsculas:

DateTime.ParseExact("20101108 230125","yyyyMMdd HHmmss", null) 

Minúsculas hh especifica que el tiempo usa un reloj de 12 horas (AM/PM). La mayúscula HH es una hora del reloj de 24 horas.

Para obtener información más detallada, consulte documentation of custom DateTime format strings.

+0

¿Por qué esto causa una excepción? Personalmente, esperaría que hh convierta 23 en 11 en lugar de arrojar una excepción. ¿Es ParseExact que lo causa? –

+1

@Marcus: 'ParseExact' hará lo que dice; analizar la cadena con el formato * exact * especificado. Dado que 'hh' le dice que espere un valor de tiempo de reloj de 12 horas en esa posición,' 23' claramente cae fuera del rango de valores aceptables. Analiza la cadena exacta, no se realizan conversiones. Entonces, sí, la excepción es lanzada por el método 'ParseExact'. –

+0

Saludos por la explicación extendida. :) –

2

Trate de usar:

var dt = DateTime.ParseExact("20101108 230125", "yyyyMMdd HHmmss", null) 

El "hh" es de de 12 horas y "HH" para las 24 horas.

+0

Oops acaba de ver la respuesta de Fredrik ... –

Cuestiones relacionadas