Jak mogę rozliczyć okres (AM / PM) za pomocą strftime?

152

W szczególności mam kod, który upraszcza to:

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)

Co daje? Czy Python po prostu ignoruje specyfikator okresu podczas analizowania dat, czy też robię coś głupiego?

Tryptyk
źródło

Odpowiedzi:

213

Python time.strftimedocs powiedzieć:

W przypadku użycia z funkcją strptime () %pdyrektywa ma wpływ na pole godziny wyjściowej tylko wtedy, gdy %Idyrektywa jest używana do analizowania godziny.

Oczywiście, zmiana %Hna %Isprawia, że ​​działa.

Ned Batchelder
źródło
2
Co jest świetne, chyba że twoje ciągi czasowe mają 0,00pm ( %Izaczyna się od 1) !!
Andy Hayden
1
@AndyHayden jest 12 PM lub 12 AM. Nie wiem, czy godzina 0 rano czy 0 po południu ma sens. Tylko w formacie 24-godzinnym zerowa godzina ma sens, ale wtedy nie jest to AM / PM.
arun
Zwróć również uwagę, aby sprawdzić swoje ustawienia regionalne. Jeśli używasz locale, które nie używają am / pm, będziesz musiał przełączyć się na locale, które używają am / pm. Użyłem% I i% p, a% p pozostawiono puste, gdy używam de_DE jako locale. Przełączenie na en_GB sprawiło, że% p było widoczne.
Torsten
56
format = '%Y-%m-%d %H:%M %p'

Format jest używany %Hzamiast %I. Ponieważ %Hjest to format „24-godzinny”, prawdopodobnie po prostu odrzuca %pinformacje. To działa dobrze, jeśli zmienisz %Hsię %I.

jamessan
źródło
23

Użyłeś %H(format 24-godzinny) zamiast %I(format 12-godzinny).

Tim Pietzcker
źródło
15

Spróbuj zamienić% H (godzina na zegarze 24-godzinnym) na% I (godzina w zegarze 12-godzinnym)?

keithjgrant
źródło