2009-11-18 16 views
89

Specificamente Ho codice che semplifica a questo:Come posso tenere conto del periodo (AM/PM) con datetime.strptime?

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) 

Che cosa dà? Python ignora semplicemente l'identificatore del periodo durante l'analisi delle date o sto facendo qualcosa di stupido?

+4

Grazie a tutti per le risposte rapide. Vorrei poter sopravvivere più di una volta. – Triptych

risposta

115

Il pitone time.strftime docs dire:

Quando utilizzato con la funzione strptime(), la direttiva %p solo influenza il campo ora uscita se la direttiva %I viene utilizzato per analizzare all'ora.

Abbastanza sicuro, cambiare il vostro %H-%I lo fa funzionare.

+1

Ugh. Ovviamente. Grazie. – Triptych

+0

Che è fantastico * a meno che * le stringhe del tempo non abbiano 0.00pm, ('% I' inizia a 1) !! –

9

Provare a sostituire% H (Ora su un orologio a 24 ore) con% I (Ora su un orologio a 12 ore)?

12

È stato utilizzato %H (formato 24 ore) anziché %I (formato 12 ore).

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

Il formato utilizza %H anziché %I. Poiché %H è il formato "24 ore", è probabile che si scartino semplicemente le informazioni %p. Funziona perfettamente se si modifica lo %H in %I.

Problemi correlati