Python strftime - дата без указания 0?

При использовании Python strftime существует ли способ удалить первое 0 из даты, если оно до 10-го, т.е. поэтому 01 1? Не можете найти % вещь для этого?

Спасибо!

Ответ 1

Вы можете использовать левую полосу, чтобы удалить начальный нуль

day = day.lstrip('0')

>>> day = '01'
>>> day.lstrip('0')
'1'

Ответ 2

На самом деле у меня была та же проблема, и я понял, что если вы добавите дефис между % и буквой, вы можете удалить начальный нуль.

Например %Y/%-m/%-d.

Это работает только в Unix (Linux, OS X), а не в Windows (включая Cygwin). В Windows вы должны использовать #, например. %Y/%#m/%#d.

Ответ 3

Мы можем делать такие вещи с появлением метода format, поскольку python2.6:

>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'

Хотя, возможно, вне рамки оригинального вопроса, для более интересных форматов вы можете делать такие вещи, как:

>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'

И с python3.6 это можно выразить как строку встроенную форматированную:

Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> dt = datetime.datetime.now()
>>> f'{dt:%A} {dt:%B} {dt.day}, {dt.year}'
'Monday August 29, 2016'

Ответ 4

Некоторые платформы могут поддерживать спецификацию ширины и точности между % и буквой (например, "d" для дня месяца), согласно http://docs.python.org/library/time.html - но это определенно не переносное решение (например, не работает на моем Mac;-). Может быть, вы можете использовать замену строки (или RE, для действительно неприятного формата) после strftime, чтобы исправить это? например:.

>>> y
(2009, 5, 7, 17, 17, 17, 3, 127, 1)
>>> time.strftime('%Y %m %d', y)
'2009 05 07'
>>> time.strftime('%Y %m %d', y).replace(' 0', ' ')
'2009 5 7'

Ответ 5

>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'

Ответ 6

Здесь - документация модификаторов, поддерживаемых strftime() в библиотеке GNU C. (Как и люди, сказанные ранее, это может быть не переносимо.) Интерес к вам может быть:

  • %e вместо %d заменит начальный ноль в месяце месяца пробелом

Он работает на моем Python (в Linux). Я не знаю, будет ли это работать на вас.

Ответ 8

Я нашел фильтр форматирования даты в Django быстрым и легким. Он удаляет ведущие нули. Если вы не возражаете импортировать модуль Django, проверьте его.

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date

from django.template.defaultfilters import date as django_date_filter
print django_date_filter(mydate, 'P, D M j, Y')    

Ответ 9

довольно поздно для вечеринки, но %-d работает на моем конце.

datetime.now().strftime('%B %-d, %Y') создает нечто вроде "5 ноября 2014 года

cheers:)

Ответ 10

Взгляните на - ниже:

>>> from datetime import datetime
>>> datetime.now().strftime('%d-%b-%Y')
>>> '08-Oct-2011'
>>> datetime.now().strftime('%-d-%b-%Y')
>>> '8-Oct-2011'
>>> today = datetime.date.today()
>>> today.strftime('%d-%b-%Y')
>>> print(today)

Ответ 11

Основываясь на методе Alex, это будет работать как для случаев начала и после пробела:

re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")

Мне нравится это лучше, чем .format или% -d, потому что это кросс-платформенный и позволяет мне использовать strftime (чтобы получить такие вещи, как "Ноябрь" и "Понедельник" ).

Ответ 12

Поскольку Python действительно просто называет функцию языка C strftime(3) на вашей платформе, возможно, есть символы формата, которые вы могли бы использовать для управления начальным нулем; попробуйте man strftime и посмотрите. Но, конечно, результат не будет переносимым, как напомнит вам руководство Python.: -)

Вместо этого я попытался бы использовать объект datetime нового стиля, который имеет такие атрибуты, как t.year и t.month и t.day, и поместите их через нормальное, мощное форматирование оператора %, который поддерживает управление ведущими нулями. Подробнее см. http://docs.python.org/library/datetime.html. Еще лучше, используйте оператор "".format(), если ваш Python имеет его и будет еще более современным; он также имеет множество опций для чисел. Смотрите: http://docs.python.org/library/string.html#string-formatting.

Ответ 13

Для %d вы можете преобразовать в целое число с помощью int(), тогда он автоматически удалит начало 0 и станет целым. Затем вы можете преобразовать обратно в строку с помощью str().

Ответ 14

Старый вопрос, но% l (нижний регистр L) работал у меня в strftime: это может не работать для всех, хотя, поскольку он не указан в документации Python, я нашел

Ответ 15

import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")

Ответ 16

просто используйте replace следующим образом:

(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")

он выведет:

'2017/7/21'