Извлечение двузначных месяцев и дней из даты Python [дубликат]


этот вопрос уже есть ответ здесь:

есть ли способ извлечь месяц и день с помощью изоформатов? Предположим, что сегодняшняя дата-8 марта 2013 года.

>>> d = datetime.date.today()
>>> d.month
3
>>> d.day
8

хочу:

>>> d = datetime.date.today()
>>> d.month
03
>>> d.day
08

Я могу сделать это, написав if заявления и конкатенации a ведущий 0 в случае, если день или месяц является одной цифрой, но было интересно, есть ли автоматический способ генерации того, что я хочу.

2 75

2 ответа:

посмотрите на типы этих свойств:

In [1]: import datetime

In [2]: d = datetime.date.today()

In [3]: type(d.month)
Out[3]: <type 'int'>

In [4]: type(d.day)
Out[4]: <type 'int'>

оба являются целыми числами. Так что нет автоматическая способ сделать то, что вы хотите. Так что в узком смысле ответ на ваш вопрос нет.

Если вы хотите ведущие нули, вам придется отформатировать их так или иначе. Для этого у вас есть несколько вариантов:

In [5]: '{:02d}'.format(d.month)
Out[5]: '03'

In [6]: '%02d' % d.month
Out[6]: '03'

In [7]: d.strftime('%m')
Out[7]: '03'

вы можете использовать строковый форматер для заполнения любого целого числа нулями. Он действует так же, как с printf.

>>> d = datetime.date.today()
>>> '%02d' % d.month
'03'

обновлено для py36: используйте f-строки! Для генерала ints Вы можете использовать d formatter и явно сказать ему площадку с нулями:

 >>> d = datetime.date.today()
 >>> f"{d.month:02d}"
 '07'

но datetimes являются особыми и поставляются со специальными форматтерами, которые уже имеют нулевую прокладку:

 >>> f"{d:%d}"  # the day
 '01'
 >>> f"{d:%m}"  # the month
 '07'