padding – Python strftime – date without leading 0?

The Question :

308 people think this question is useful

When using Python strftime, is there a way to remove the first 0 of the date if it’s before the 10th, ie. so 01 is 1? Can’t find a %thingy for that?


The Question Comments :

The Answer 1

612 people think this answer is useful

Actually I had the same problem and I realized that, if you add a hyphen between the % and the letter, you can remove the leading zero.

For example %Y/%-m/%-d.

This only works on Unix (Linux, OS X), not Windows (including Cygwin). On Windows, you would use #, e.g. %Y/%#m/%#d.

The Answer 2

195 people think this answer is useful

We can do this sort of thing with the advent of the format method since python2.6:

>>> import datetime
>>> '{dt.year}/{dt.month}/{}'.format(dt =

Though perhaps beyond the scope of the original question, for more interesting formats, you can do stuff like:

>>> '{dt:%A} {dt:%B} {}, {dt.year}'.format(
'Wednesday December 3, 2014'

And as of python3.6, this can be expressed as an inline formatted string:

Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> dt =
>>> f'{dt:%A} {dt:%B} {}, {dt.year}'
'Monday August 29, 2016'

The Answer 3

39 people think this answer is useful

Some platforms may support width and precision specification between % and the letter (such as ‘d’ for day of month), according to — but it’s definitely a non-portable solution (e.g. doesn’t work on my Mac;-). Maybe you can use a string replace (or RE, for really nasty format) after the strftime to remedy that? e.g.:

>>> y
(2009, 5, 7, 17, 17, 17, 3, 127, 1)
>>> time.strftime('%Y %m %d', y)
'2009 05 07'
>>> time.strftime('%Y %m %d', y).replace(' 0', ' ')
'2009 5 7'

The Answer 4

31 people think this answer is useful

Here is the documentation of the modifiers supported by strftime() in the GNU C library. (Like people said before, it might not be portable.) Of interest to you might be:

  • %e instead of %d will replace leading zero in day of month with a space

It works on my Python (on Linux). I don’t know if it will work on yours.

The Answer 5

30 people think this answer is useful
>>> import datetime
>>> d =
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')

The Answer 6

21 people think this answer is useful

On Windows, add a ‘#’, as in ‘%#m/%#d/%Y %#I:%M:%S %p’

For reference:

The Answer 7

18 people think this answer is useful

quite late to the party but %-d works on my end.'%B %-d, %Y') produces something like “November 5, 2014”

cheers 🙂

The Answer 8

10 people think this answer is useful

I find the Django template date formatting filter to be quick and easy. It strips out leading zeros. If you don’t mind importing the Django module, check it out.

from django.template.defaultfilters import date as django_date_filter
print django_date_filter(mydate, 'P, D M j, Y')    

The Answer 9

8 people think this answer is useful

Take a look at - bellow:

>>> from datetime import datetime
>>> '08-Oct-2011'
>>> '8-Oct-2011'
>>> today =
>>> today.strftime('%d-%b-%Y')
>>> print(today)

The Answer 10

5 people think this answer is useful

simply use replace like this:

("%Y/%m/%d").replace("/0", "/")

it will output:


The Answer 11

4 people think this answer is useful

For %d you can convert to integer using int() then it’ll automatically remove leading 0 and becomes integer. You can then convert back to string using str().

The Answer 12

3 people think this answer is useful

using, for example, “%-d” is not portable even between different versions of the same OS. A better solution would be to extract the date components individually, and choose between date specific formatting operators and date attribute access for each component.

e =, 1, 6)
"{date:%A} {} {date:%B}{date.year}".format(date=e)

The Answer 13

2 people think this answer is useful

Because Python really just calls the C language strftime(3) function on your platform, it might be that there are format characters you could use to control the leading zero; try man strftime and take a look. But, of course, the result will not be portable, as the Python manual will remind you. 🙂

I would try using a new-style datetime object instead, which has attributes like t.year and t.month and, and put those through the normal, high-powered formatting of the % operator, which does support control of leading zeros. See for details. Better yet, use the "".format() operator if your Python has it and be even more modern; it has lots of format options for numbers as well. See:

The Answer 14

2 people think this answer is useful

Based on Alex’s method, this will work for both the start-of-string and after-spaces cases:

re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")

I like this better than .format or %-d because this is cross-platform and allows me to keep using strftime (to get things like “November” and “Monday”).

The Answer 15

2 people think this answer is useful

Old question, but %l (lower-case L) worked for me in strftime: this may not work for everyone, though, as it’s not listed in the Python documentation I found

The Answer 16

1 people think this answer is useful
import datetime
now =
print now.strftime("%b %_d")

The Answer 17

0 people think this answer is useful

Python 3.6+:

from datetime import date
today =
text = "Today it is " + today.strftime(f"%A %B {}, %Y")

The Answer 18

0 people think this answer is useful

I am late, but a simple list slicing will do the work

today_date ='%d %b %Y')
if today_date[0] == '0':
    today_date = today_date[1:]

Add a Comment