Як я можу рахувати період (AM / PM) за допомогою стропінгу?


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:00 або 12:00. Не впевнений, чи має сенс 0 ранку чи 0 вечора. Тільки в 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 (Година на цілодобовий годинник) на% I (Година на 12-годинний годинник)?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.