web-dev-qa-db-fra.com

Pourquoi ne peut pas datetime.parseexact () analyser l'AM / PM dans "4/4/2010 16:20:00 PM" Utilisation "M '/' D '/' AAAYY H ':' MM ':' SS '' tt "

J'utilise c #, et si je fais

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

La valeur de retour est toujours 4h20 - Qu'est-ce que je fais mal avec l'utilisation de TT?

Merci!

31
Jimmy

Faites le format de l'heure (H) minuscule comme celui-ci:

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

Les majuscules "H" indiquent une heure de 24 heures et des minuscules "H" indique 12 heures et respecteront les amateurs AM/PM dans la chaîne candidate.

Note latérale : Il est préférable de fournir une instance de IFormatProvider à des méthodes telles que celles-ci (même si c'est juste CultureInfo.InvariantCulture). C'est l'une de ces choses qui ne comptent pas vraiment jusqu'à ce que vous frappiez des problèmes avec cela afin que cela puisse être bon d'avoir l'habitude de spécifier des informations sur la culture.

62
Andrew Hare

Essayez ce qui suit:

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

Ces sorties:

 4/4/2010 4:20:00 PM
3
Reed Copsey

Vous devez utiliser un "h" minuscule pour l'argument de l'heure dans la chaîne de format. La majuscule "H" représente une heure de 24 heures, de sorte que "4" est reconnue comme 4 heures du matin (car "16" aurait 16 heures).

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