Come posso tenere conto del periodo (AM / PM) usando strftime?


152

In particolare ho un codice che semplifica a questo:

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)

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

Risposte:


213

I time.strftimedocumenti di Python dicono:

Se utilizzata con la funzione strptime (), la %pdirettiva influisce sul campo dell'ora di output solo se %Iviene utilizzata per analizzare l'ora.

Abbastanza sicuro, cambiando il tuo %Hper %Ifarlo funzionare.


2
Il che è fantastico a meno che le stringhe del tempo non abbiano 0.00pm, ( %Iinizia da 1) !!
Andy Hayden,

1
@AndyHayden sono le 12:00 o le 12:00. Non sono sicuro se 0 AM o 0 PM abbiano senso. Solo nel formato 24 ore la 0a ora ha senso, ma non è AM / PM.
arun

Nota anche di avere le tue impostazioni locali sotto controllo. Se stai usando una locale che non usa am / pm dovrai passare a una locale che usa am / pm Ho usato% I e% p e% p sono stati lasciati vuoti quando ho usato de_DE come locale. Il passaggio a en_GB ha reso% p visibile.
Torsten,

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

Il formato utilizza %Hinvece di %I. Poiché %Hè il formato "24 ore", è probabile che stia semplicemente scartando le %pinformazioni. Funziona bene se si cambia la %Ha %I.



15

Prova a sostituire% H (ora su un orologio a 24 ore) con% I (ora su un orologio a 12 ore)?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.