При использовании Python strftime
существует ли способ удалить первое 0 из даты, если оно до 10-го, т.е. поэтому 01
1
? Не можете найти %
вещь для этого?
Спасибо!
При использовании Python strftime
существует ли способ удалить первое 0 из даты, если оно до 10-го, т.е. поэтому 01
1
? Не можете найти %
вещь для этого?
Спасибо!
Вы можете использовать левую полосу, чтобы удалить начальный нуль
day = day.lstrip('0')
>>> day = '01'
>>> day.lstrip('0')
'1'
На самом деле у меня была та же проблема, и я понял, что если вы добавите дефис между %
и буквой, вы можете удалить начальный нуль.
Например %Y/%-m/%-d
.
Это работает только в Unix (Linux, OS X), а не в Windows (включая Cygwin). В Windows вы должны использовать #
, например. %Y/%#m/%#d
.
Мы можем делать такие вещи с появлением метода 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'
Некоторые платформы могут поддерживать спецификацию ширины и точности между %
и буквой (например, "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'
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
Здесь - документация модификаторов, поддерживаемых strftime()
в библиотеке GNU C. (Как и люди, сказанные ранее, это может быть не переносимо.) Интерес к вам может быть:
%e
вместо %d
заменит начальный ноль в месяце месяца пробеломОн работает на моем Python (в Linux). Я не знаю, будет ли это работать на вас.
В Windows добавьте '#', как в '% # m/% # d/% Y% # I:% M:% S% p'
Для справки: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
Я нашел фильтр форматирования даты в 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')
довольно поздно для вечеринки, но %-d
работает на моем конце.
datetime.now().strftime('%B %-d, %Y')
создает нечто вроде "5 ноября 2014 года
cheers:)
Взгляните на -
ниже:
>>> 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)
Основываясь на методе Alex, это будет работать как для случаев начала и после пробела:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
Мне нравится это лучше, чем .format или% -d, потому что это кросс-платформенный и позволяет мне использовать strftime (чтобы получить такие вещи, как "Ноябрь" и "Понедельник" ).
Поскольку 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.
Для %d
вы можете преобразовать в целое число с помощью int()
, тогда он автоматически удалит начало 0 и станет целым. Затем вы можете преобразовать обратно в строку с помощью str()
.
Старый вопрос, но% l (нижний регистр L) работал у меня в strftime: это может не работать для всех, хотя, поскольку он не указан в документации Python, я нашел
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
просто используйте replace
следующим образом:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
он выведет:
'2017/7/21'