web-dev-qa-db-fra.com

Extraction des mois et des jours à deux chiffres d'une date Python

Existe-t-il un moyen d'extraire le mois et le jour en utilisant des isoformats? Supposons que la date d'aujourd'hui est le 8 mars 2013.

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

Je voudrais:

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

Je peux le faire en écrivant des déclarations si et en concaténant un 0 au premier rang si le jour ou le mois est un chiffre mais que je me demandais s’il existait un moyen automatique de générer ce que je veux.

100
codingknob

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 automatique moyen de faire ce que vous voulez. Donc, au sens étroit, la réponse à votre question est non.

Si vous voulez des zéros non significatifs, vous devrez les formater d'une manière 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'
156
Roland Smith

vous pouvez utiliser un formateur de chaîne pour remplir un entier avec des zéros. Il agit exactement comme le printf de C.

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

Mise à jour pour py36: Utilisez f-strings! Pour les ints généraux, vous pouvez utiliser le formateur d et lui indiquer explicitement de compléter avec des zéros:

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

Mais datetimes sont spéciaux et viennent avec des formateurs spéciaux qui sont déjà remplis de zéros:

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