Я являюсь все еще немного медленным с Python, таким образом, я не имею, это выяснило вне того, что находится, очевидно, в документах и т.д.
Я работал с Django немного, где они добавили некоторые параметры форматирования даты и времени через теги шаблона, но в обычном коде Python, как я могу получить 12-часовой час без начального нуля?
Существует ли простой способ сделать это? Я смотрю на 2,5 и 2,6 документа для "strftime ()" и там, кажется, не параметр форматирования там для этого случая.
Я должен использовать что-то еще?
Не стесняйтесь включать любые другие форматирующие время подсказки, которые не очевидны из документов.=)
Ничто встроенное в datetime
не сделает этого. Вам придется использовать что-то вроде:
datetime.time(1).strftime('%I:%M%p').lstrip('0')
Как отмечает @naktinis, это приспособлено для использования этого конкретного параметра strftime
. К сожалению, не существует общего решения, если содержимое параметра strftime
неизвестно или не определено (например, внешний параметр), потому что это становится проблемой "делай то, что я имею в виду, а не то, что я говорю".
Таким образом, учитывая, что вы должны знать, что находится в параметре strftime
, в более сложном случае вы могли бы решить это как части:
tval = datetime.time(1)
tval_str = (tval.strftime('%A, %B ') + tval.strftime('%d').lstrip('0')
+ tval.strftime(' %Y, ') + tval.strftime('%I:%M').lstrip('0')
+ tval.strftime('%p').lower())
или с помощью модуля re
:
tval = datetime.time(1)
tval_str = re.sub(r"^0|(?<=\s)0", "",
re.sub(r"(?<=[0-9])[AP]M", lambda m: m.group().lower(),
tval.strftime('%A, %B %d %Y, %I:%M%p')))
При этом имейте в виду, что если термин "%p"
дает вам заглавные буквы, это может быть потому, что пользователь настроил свою локаль так, и, изменяя регистр, вы переопределяете предпочтения пользователя, что иногда приводит к сообщениям об ошибках. Кроме того, пользователь может захотеть что-то другое, чем "am" или "pm", например, "a.m." и "p.m.". Также обратите внимание, что для разных локалей они разные (например. en_US
локаль дает AM
или PM
для %p
, но de_DE
дает am
или pm
), и вы можете получить символы не в той кодировке, которую вы предполагаете.
Из документации по поведению strftime:
Поскольку формат зависит от текущей локали, следует быть осторожным, делая предположения о выходном значении. Порядок полей будет отличаться (например, "месяц/день/год" против "день/месяц/год"), а вывод может содержать символы Unicode, закодированные с использованием кодировки по умолчанию в локали (например, если текущей локалью является
js_JP
, кодировка по умолчанию может быть любой изeucJP
,SJIS
илиutf-8
; используйтеlocale. getlocale()
для определения кодировки текущей локали).
Короче говоря, если вы считаете, что вам нужно переопределить настройки локали, убедитесь, что у вас есть веская причина для этого, чтобы не создавать новые ошибки.
Хотя я неравнодушен к ответу Майка Десимоуна , для целей голосования я думаю, что это может быть полезным вкладом ...
Проект Django содержит класс форматирования даты "PHP-совместимый" в django / utils / dateformat.py (ствол) . Он используется следующим образом (пример оболочки):
>>> import datetime
>>> from django.utils.dateformat import DateFormat
>>> d = datetime.datetime.now()
>>> df = DateFormat(d)
>>> df.format('g:ia') # Format for Hour-no-leading-0, minutes, lowercase 'AM/PM'
u'9:10a.m.'
Он удовлетворяет требованиям, указанным здесь, и, возможно, стоит включить его в ваш проект. При этом я скажу, что вам следует убедиться, что лицензия разрешает такое использование ... Любые пояснения приветствуются.
datetime.time
объекты раскрывают поля час
, минута
и секунда
. Создание собственного форматирования с их помощью довольно тривиально. Что-то вроде этого:
return "%d:%02d %s" % (foo.hour % 12 + 0 if foo.hour % 12 else 12, #ugh
foo.minute,
"pm" if foo.hour >= 12 else "am")
Я знаю, что это довольно дешево, но вы могли бы просто отбросить первый символ, если это ноль :)
Используйте % l
, чтобы получить час как число от 1 до 12:
In [2]: datetime.time(hour=14,minute=35).strftime('%l:%M%p')
Out[2]: ' 2:35PM'
Для получения дополнительных кодов формата см. http: // au2. php.net/strftime.