Extraer meses y días de dos dígitos de una fecha de Python [duplicar]


Esta pregunta ya tiene una respuesta aquí:

¿Hay alguna forma de extraer el mes y el día usando isoformatos? Supongamos que la fecha de hoy es el 8 de marzo de 2013.

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

Quiero:

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

Puedo hacer esto escribiendo declaraciones if y concatenar un 0 inicial en caso de que el día o mes sea un solo dígito pero me preguntaba si había una forma automática de generar lo que quiero.

Author: alex, 2013-03-20

2 answers

Mira los tipos de esas propiedades:

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

Ambos son enteros. Así que no hay forma automática de hacer lo que quieres. Así que en el sentido estricto, la respuesta a tu pregunta es no .

Si quieres ceros iniciales, tendrás que formatearlos de una forma u otra. Para eso tienes varias opciones:

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
Author: Roland Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-19 20:24:35

Puede usar un formateador de cadenas para rellenar cualquier entero con ceros. Actúa igual que C printf.

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

Actualizado para py36: Use f-strings! Para ints generales puedes usar el formateador d y decirle explícitamente que rellene con ceros:

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

Pero datetime s son especiales y vienen con formateadores especiales que ya están acolchados cero:

 >>> f"{d:%d}"  # the day
 '01'
 >>> f"{d:%m}"  # the month
 '07'
 11
Author: eduffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-01 14:28:35