Python strftime - дата без начального 0? - PullRequest
217 голосов
/ 25 мая 2009

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

Спасибо!

Ответы [ 17 ]

483 голосов
/ 15 января 2010

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

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

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

176 голосов
/ 19 апреля 2013

Мы можем сделать это с появлением метода 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 это может быть выражено как строка в формате * inline :

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'
35 голосов
/ 25 мая 2009

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

>>> 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'
26 голосов
/ 05 мая 2011
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
20 голосов
/ 25 мая 2009

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

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

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

15 голосов
/ 31 июля 2015

В Windows добавьте «#», как в «% # m /% # d /% Y% # I:% M:% S% p»

Для справки: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx

15 голосов
/ 25 ноября 2014

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

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

ура :) 1009 *

10 голосов
/ 15 сентября 2009

Я считаю, что фильтр форматирования даты в шаблоне 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')    
4 голосов
/ 08 октября 2011

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

>>> 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)
3 голосов
/ 21 июля 2017

просто используйте replace вот так:

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

будет выводиться:

'2017/7/21'
...