Как я могу учесть период (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.

jamessan
источник
23

Вы использовали %H(24-часовой формат) вместо %I(12-часовой формат).

Тим Питцкер
источник
15

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

keithjgrant
источник