Learn Python: How to format date in Python

Dealing with Date and Time data in any language is very important topic of discussion. Different countries use different ways to represent a date. E.g. in USA, a date is commonly expressed in {month}/{day}/{year} where as in country like India, date is represented in {day}/{month}/{year} format. Therefore when displaying a date value to a user, it is important that it is printed in format that the user is going to recognize.

In Python, when you print date value, by default it is represented in YYYY-MM-DD format. Following examples prints today's date in default format. ​

>>> from datetime import date
>>> d = date.today()
>>> print(d)
2021-08-20

In your application, you are going to print the date in various formats. Python provides a very rich set of formatting options to print a date in a custom format. Before I show diffeent examples, you will need to see all the options that are availble. I have borrowed following table from Python documentation to show the options.

Directive

Meaning

Example

Notes

%a

Weekday as locale’s abbreviated name.

Sun, Mon, …, Sat (en_US);
So, Mo, …, Sa (de_DE)

(1)

%A

Weekday as locale’s full name.

Sunday, Monday, …, Saturday (en_US);
Sonntag, Montag, …, Samstag (de_DE)

(1)

%w

Weekday as a decimal number, where 0 is Sunday and 6 is Saturday.

0, 1, …, 6

%d

Day of the month as a zero-padded decimal number.

01, 02, …, 31

(9)

%b

Month as locale’s abbreviated name.

Jan, Feb, …, Dec (en_US);
Jan, Feb, …, Dez (de_DE)

(1)

%B

Month as locale’s full name.

January, February, …, December (en_US);
Januar, Februar, …, Dezember (de_DE)

(1)

%m

Month as a zero-padded decimal number.

01, 02, …, 12

(9)

%y

Year without century as a zero-padded decimal number.

00, 01, …, 99

(9)

%Y

Year with century as a decimal number.

0001, 0002, …, 2013, 2014, …, 9998, 9999

(2)

%H

Hour (24-hour clock) as a zero-padded decimal number.

00, 01, …, 23

(9)

%I

Hour (12-hour clock) as a zero-padded decimal number.

01, 02, …, 12

(9)

%p

Locale’s equivalent of either AM or PM.

AM, PM (en_US);
am, pm (de_DE)

(1), (3)

%M

Minute as a zero-padded decimal number.

00, 01, …, 59

(9)

%S

Second as a zero-padded decimal number.

00, 01, …, 59

(4), (9)

%f

Microsecond as a decimal number, zero-padded on the left.

000000, 000001, …, 999999

(5)

%z

UTC offset in the form ±HHMM[SS[.ffffff]] (empty string if the object is naive).

(empty), +0000, -0400, +1030, +063415, -030712.345216

(6)

%Z

Time zone name (empty string if the object is naive).

(empty), UTC, GMT

(6)

%j

Day of the year as a zero-padded decimal number.

001, 002, …, 366

(9)

%U

Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0.

00, 01, …, 53

(7), (9)

%W

Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0.

00, 01, …, 53

(7), (9)

%c

Locale’s appropriate date and time representation.

Tue Aug 16 21:30:00 1988 (en_US);
Di 16 Aug 21:30:00 1988 (de_DE)

(1)

%x

Locale’s appropriate date representation.

08/16/88 (None);
08/16/1988 (en_US);
16.08.1988 (de_DE)

(1)

%X

Locale’s appropriate time representation.

21:30:00 (en_US);
21:30:00 (de_DE)

(1)

%%

A literal '%' character.

%

Several additional directives not required by the C89 standard are included for convenience. These parameters all correspond to ISO 8601 date values.

Directive

Meaning

Example

Notes

%G

ISO 8601 year with century representing the year that contains the greater part of the ISO week (%V).

0001, 0002, …, 2013, 2014, …, 9998, 9999

(8)

%u

ISO 8601 weekday as a decimal number where 1 is Monday.

1, 2, …, 7

%V

ISO 8601 week as a decimal number with Monday as the first day of the week. Week 01 is the week containing Jan 4.

01, 02, …, 53

(8), (9)

Python uses strftime to print date in a custom format. It takes formatting string as an argument. Let's see examples of use of these custom formatting rules.

Print mm/YYYY format

>>> d.strftime("%m/%Y")
'08/2021'

Print mm/dd/YYYY format

>>> d.strftime("%m/%d/%Y")
'08/20/2021'

Print month name

>>> d.strftime("%b")
'Aug'
>>> d.strftime("%B")
'August'

Print day name

>>> d.strftime("%a")
'Fri'
>>> d.strftime("%A")
'Friday'

Print week number

>>> d.strftime(f"Today is %W week of the year %Y")
'Today is 33 week of the year 2021'

%W will use Monday as first day of the week. If you use %U, then Sunday is considered first day of the week.

Print in local format

>>> from datetime import datetime
>>> d = datetime.today()
>>> d.strftime("%x")
'08/20/21'
>>> d.strftime("%c")
'Fri Aug 20 08:31:00 2021'

Print time only

>>> d.strftime("%X")
'08:31:00'

Print time in custom format

>>> d.strftime(f"%Hh:%Mm:%Ss")
'08h:31m:00s'
>>> d.strftime(f"%Hh:%Mm:%Ss %p")
'08h:31m:00s AM'

I have shown different example of formatting options. This will give you good idea on how to combine these options to print date and time in a format that is convenient for your users. If you have any questions about printing date and time, feel free to drop me a line.

Search

Social

Weather

-0.1 °C / 31.8 °F

weather conditions Clouds

Monthly Posts

Blog Tags