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?

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.


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.



15

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.