Extracting double-digit months and days from a Python date [duplicate]

Each Answer to this Q is separated by one/two green lines.

Is there a way to extract month and day using isoformats? Lets assume today’s date is March 8, 2013.

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

I want:

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

I can do this by writing if statements and concatenating a leading 0 in case the day or month is a single digit but was wondering whether there was an automatic way of generating what I want.

Look at the types of those properties:

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

Both are integers. So there is no automatic way to do what you want. So in the narrow sense, the answer to your question is no.

If you want leading zeroes, you’ll have to format them one way or another.
For that you have several 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'

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

you can use a string formatter to pad any integer with zeros. It acts just like C’s printf.

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

Updated for py36: Use f-strings! For general ints you can use the d formatter and explicitly tell it to pad with zeros:

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

But datetimes are special and come with special formatters that are already zero padded:

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

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.