Как я могу учесть период (AM / PM), используя strftime?


152

В частности, у меня есть код, который упрощает это:

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)

Что дает? Python просто игнорирует спецификатор периода при разборе дат или я делаю что-то глупое?

Ответы:


213

В Python time.strftimeдокументы говорят:

При использовании с функцией strptime () %pдиректива влияет только на поле выходного часа, если %Iдиректива используется для анализа часа.

Конечно же, изменив свой, %Hчтобы %Iон работал.


2
Что здорово, если у ваших временных строк нет 0.00pm ( %Iначинается с 1) !!
Энди Хейден

1
@AndyHayden это 12 вечера или 12 утра. Не уверен, имеет ли смысл 0:00 или 0:00. Только в 24-часовом формате имеет смысл 0-й час, но тогда это не AM / PM.
Арун

Также обратите внимание, чтобы проверить вашу локаль. Если вы используете локаль, которая не использует am / pm, вам придется переключиться на локаль, которая использует am / pm. Я использовал% I, а% p и% p были оставлены пустыми при использовании de_DE в качестве локали. Переключение на en_GB сделало% p видимым.
Торстен

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

Формат используется %Hвместо %I. Поскольку %Hэто 24-часовой формат, скорее всего, он просто отбрасывает %pинформацию. Это прекрасно работает , если вы измените %Hк %I.



15

Попробуйте заменить% H (часы на 24-часовых часах) на% I (часы на 12-часовых часах)?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.