yyyymmdd parseexact parsear parse ejemplos convert cast c# datetime parsing

c# - parsear - ¿Por qué no puede DateTime.ParseExact() analizar el AM/PM en "4/4/2010 4:20:00 PM" con "M"/"d"/"aaaa H": "mm": "ss" tt "



datetime.parseexact c# (3)

Estoy usando c #, y si lo hago

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M''/''d''/''yyyy H'':''mm'':''ss'' ''tt", null)

El valor de retorno siempre es 4:20 AM. ¿Qué estoy haciendo mal con el uso de tt?

¡Gracias!


Debe usar una "h" minúscula para el argumento de la hora en la cadena de formato. La "H" mayúscula representa la hora de 24 horas, por lo que "4" se reconoce como 4 AM (ya que "16" sería 4 PM).

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)


Haga que el formato de la hora ( H ) sea minúsculo como este:

DateTime.ParseExact( "4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

La "H" en mayúscula indica la hora de 24 horas y la "h" en minúscula indica la hora de 12 horas y respetará la AM / PM en la cadena candidata.

Nota al IFormatProvider : es mejor proporcionar una instancia de IFormatProvider a métodos como este (incluso si solo es CultureInfo.InvariantCulture ). Es una de esas cosas que realmente no importan hasta que te topas con problemas, por lo que puede ser bueno tener el hábito de especificar la información cultural.


Pruebe lo siguiente:

Console.WriteLine(DateTime.ParseExact("4/4/2010 4:20:00 PM", "M''/''d''/''yyyy h'':''mm'':''ss tt", null));

Esto produce:

4/4/2010 4:20:00 PM