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

3 minutos de lectura

avatar de usuario
mando codificador

¿Hay alguna manera 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 concatenando un 0 inicial en caso de que el día o el mes sea un solo dígito, pero me preguntaba si había una forma automática de generar lo que quiero.

  • d.strftime('%m') y d.strftime('%d') Esto tiene que ser un duplicado.

    – carne_mecánica

    19/03/2013 a las 20:10


  • Es un engaño — Pero debo decir que éste es más claro que el engaño.

    – mgilson

    19 de marzo de 2013 a las 20:13

avatar de usuario
roland smith

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. entonces no hay automático manera de hacer lo que quieres. Entonces, en sentido estricto, la respuesta a su pregunta es no.

Si desea ceros a la izquierda, tendrá 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'

In [8]: f'{d.month:02d}'
Out[8]: '03'

  • Gracias. Para aquellos que usan valores múltiples con numeración manual, solo asegúrese de agregar el número antes de “:02d”, por ejemplo: {0}/{1:02d}-{2:02d}_{3}.json’.format(othervalue , mes actual, día actual, otro valor2)

    – Alex

    28 de julio de 2017 a las 8:58

  • Solo para agregar otro método de formato para obtener una cadena cero rellena, puede usar el zfill() funcionar así: str(d.month).zfill(2)

    – muón

    1 de marzo de 2018 a las 4:22

  • fecha =’2019-09-15′ f’0{pd.to_datetime(fecha).mes}’

    – Dheeraj

    4 oct 2019 a las 14:00


  • Éste f'{d.month:02d}' es perfecto. Gracias !

    – Nicoolasen

    1 de febrero a las 23:37

avatar de usuario
eduff

puede usar un formateador de cadenas para rellenar cualquier entero con ceros. Actúa como C printf.

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

Actualizado para py36: ¡Usa f-strings! En general ints puedes usar el d formateador y dígale explícitamente que complete con ceros:

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

Pero datetimes son especiales y vienen con formateadores especiales que ya tienen relleno cero:

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

  • en lugar de una página de libro de texto inflada, esta respuesta en realidad le da una sola línea de trabajo, felicitaciones

    – usuario2667976

    6 mayo 2018 a las 22:04

¿Ha sido útil esta solución?