Wie kann ich den Zeitraum (AM / PM) mit strftime abrechnen?

151

Insbesondere habe ich Code, der dies vereinfacht:

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)

Was gibt? Ignoriert Python beim Parsen von Datumsangaben nur den Punktbezeichner oder mache ich etwas Dummes?

Triptychon
quelle

Antworten:

211

Die Python- time.strftimeDokumente sagen:

Bei Verwendung mit der Funktion strptime () %pwirkt sich die Direktive nur dann auf das Feld für die Ausgabestunde aus, wenn die %IDirektive zum Parsen der Stunde verwendet wird.

Sicher genug, wenn Sie Ihre ändern %H, %Ifunktioniert es.

Ned Batchelder
quelle
2
Was großartig ist, es sei denn, Ihre Zeitangaben haben 0,00 Uhr ( %Ibeginnt um 1 Uhr ) !!
Andy Hayden
1
@ AndyHayden es ist 12 Uhr oder 12 Uhr. Ich bin mir nicht sicher, ob 0 Uhr oder 0 Uhr sinnvoll sind. Nur im 24-Stunden-Format macht die 0. Stunde Sinn, aber dann ist es nicht AM / PM.
Arun
Beachten Sie auch, dass Sie Ihr Gebietsschema überprüfen müssen. Wenn Sie ein Gebietsschema verwenden, das am / pm nicht verwendet, müssen Sie zu einem Gebietsschema wechseln, das am / pm verwendet. Ich habe% I und% p verwendet, und% p wurde leer gelassen, wenn de_DE als Gebietsschema verwendet wurde. Durch den Wechsel zu en_GB wurde% p sichtbar.
Torsten vor
56
format = '%Y-%m-%d %H:%M %p'

Das Format wird %Hanstelle von verwendet %I. Da %Hes sich um das "24-Stunden" -Format handelt, werden die %pInformationen wahrscheinlich nur verworfen . Es funktioniert gut , wenn Sie die Änderung %Hzu %I.

Jamessan
quelle
23

Sie haben %H(24-Stunden-Format) anstelle von %I(12-Stunden-Format) verwendet.

Tim Pietzcker
quelle
15

Versuchen Sie,% H (Stunde im 24-Stunden-Format) durch% I (Stunde im 12-Stunden-Format) zu ersetzen.

keithjgrant
quelle