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?

Triptyque
la source

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.

Ned Batchelder
la source
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.

Jamessan
la source
23

Vous avez utilisé %H(format 24 heures) au lieu de %I(format 12 heures).

Tim Pietzcker
la source
15

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

Keithjgrant
la source