Comment puis-je comptabiliser la période (AM / PM) à l'aide de strftime?


152

Plus précisément, j'ai du code qui simplifie à ceci:

from datetime import datetime
date_string = '2009-11-29 03:17 PM'
format = '%Y-%m-%d %H:%M %p'
my_date = datetime.strptime(date_string, format)

# This prints '2009-11-29 03:17 AM'
print my_date.strftime(format)

Ce qui donne? Python ignore-t-il simplement le spécificateur de période lors de l'analyse des dates ou est-ce que je fais quelque chose de stupide?

Réponses:


213

La time.strftimedocumentation Python dit:

Lorsqu'elle est utilisée avec la fonction strptime (), la %pdirective affecte uniquement le champ heure de sortie si la %Idirective est utilisée pour analyser l'heure.

Effectivement, changer votre %Hpour le %Ifait fonctionner.


2
Ce qui est génial à moins que vos chaînes de temps aient 0,00pm, ( %Icommence à 1) !!
Andy Hayden

1
@AndyHayden il est midi ou midi. Je ne sais pas si 0 h 00 ou 0 h 00 ont du sens. Seulement au format 24 heures, la 0ème heure a du sens, mais alors ce n'est pas AM / PM.
arun

Notez également que vous devez vérifier vos paramètres régionaux. Si vous utilisez une locale qui n'utilise pas am / pm, vous devrez basculer vers une locale qui utilise am / pm J'ai utilisé% I et% p et% p a été laissé vide lors de l'utilisation de de_DE comme locale. Le passage à en_GB a rendu% p visible.
Torsten

56
format = '%Y-%m-%d %H:%M %p'

Le format utilise %Hau lieu de %I. Puisqu'il %Hs'agit du format "24 heures", il est probable que les %pinformations ne soient pas supprimées . Cela fonctionne très bien si vous changez le %Hfichier %I.



15

Essayez de remplacer% H (heure sur une horloge de 24 heures) par% I (heure sur une horloge de 12 heures)?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.