Extraire les mois et les jours à deux chiffres d’une date Python

Existe-t-il un moyen d’extraire le mois et le jour à l’aide d’isoformats? Supposons que la date d’aujourd’hui est 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 des instructions if et en concaténant un 0 en tête si le jour ou le mois est un chiffre unique, mais je me demandais s’il existait un moyen automatique de générer ce que je voulais.

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]:  In [4]: type(d.day) Out[4]:  

Les deux sont des entiers. Il n’y a donc pas de moyen automatique de faire ce que vous voulez. Donc au sens étroit, la réponse à votre question est non .

Si vous voulez des zéros à gauche, 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' 

Vous pouvez utiliser un formateur de chaîne pour insérer un nombre entier avec des zéros. Il agit comme C printf .

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

Mis à jour pour py36: Utilisez des f-ssortingngs! Pour les int s générales, vous pouvez utiliser le d formateur et lui indiquer explicitement de remplir avec des zéros:

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

Mais les datetime sont spéciaux et viennent avec des formateurs spéciaux qui sont déjà remplis à zéro:

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