Extraire des mois et des jours à deux chiffres d'une date Python [dupliquer]

cette question a déjà une réponse ici:

Existe-t-il un moyen d'extraire mois et jour à l'aide d'isoformats? Supposons que la date d'aujourd'hui soit le 8 mars 2013.

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

je veux:

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

je peux le faire en écrivant si des déclarations et concaténant un 0 de tête dans le cas où le jour ou le mois est un seul chiffre, mais se demandait s'il y avait un moyen automatique de générer ce que je veux.

75
demandé sur alex 2013-03-20 00:03:53

2 réponses

regardez les types de ces propriétés:

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'>

les deux sont des entiers. Donc, il n'y a pas de automatique façon de faire ce que vous voulez. Ainsi, au sens étroit, la réponse à votre question Est Non .

si vous voulez des zéros de tête, vous devrez les formater d'une façon ou d'une autre. Pour cela, vous avez plusieurs options:

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'
117
répondu Roland Smith 2013-03-19 20:24:35

vous pouvez utiliser un formatteur de chaîne pour garnir n'importe quel entier avec des zéros. Il agit comme C ' printf .

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

mise à Jour pour py36: l'Utilisation de f-cordes! Pour le général int vous pouvez utiliser le formatteur d et lui dire explicitement de pad avec des zéros:

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

mais datetime s sont spéciaux et viennent avec des formateuses spéciales qui sont déjà zéro rembourré:

 >>> f"{d:%d}"  # the day
 '01'
 >>> f"{d:%m}"  # the month
 '07'
11
répondu eduffy 2018-07-01 14:28:35