Python strftime()

In this article, we will take a detailed look at strftime() method of Python’s datetime module with examples.
strftime() method is used to convert datetime object to string in desired format.

Python docs for strftime() method state

Convert object to a string according to a given format

strftime() accepts a string argument which represents the format in which datetime object will be converted to a string. The string argument is a format specifier and is preceded with a % symbol.

To use strftime(), we need to import datetime class from Python’s datetime module.

Convert datetime to string with strftime()
Below is an example to convert a datetime object to string in various formats. Notice the argument types provided to strftime().

from datetime import datetime as dt

# get current date and time object
date_time = dt.now()
print('Full date time:',date_time.strftime('%c'))
print('Only date:',date_time.strftime('%x'))
print('Only time:',date_time.strftime('%X'))
print('Complete year:',date_time.strftime('%Y'))
print('Year without century:',date_time.strftime('%y'))
print('Complete month:',date_time.strftime('%B'))
print('Short month:',date_time.strftime('%b'))
print('Day short name:',date_time.strftime('%a'))
print('Day full name:',date_time.strftime('%A'))
print('Date:',date_time.strftime('%d'))
print('Hour(24 hour format):',date_time.strftime('%H'))
print('Hour(12 hour format):',date_time.strftime('%I'))
print('Minute:',date_time.strftime('%M'))
print('Second:',date_time.strftime('%S'))
print('AM or PM:', date_time.strftime('%p'))

Output is

Full date time: Fri Jul 16 00:11:05 2021
Only date: 07/16/21
Only time: 00:11:05
Complete year: 2021
Year without century: 21
Complete month: July
Short month: Jul
Day short name: Fri
Day full name: Friday
Date: 16
Hour(24 hour format): 00
Hour(12 hour format): 12
Minute: 11
Second: 05
AM or PM: AM

Remember that you can supply any number of format specifiers to strftime() at once.
Thus, to create a date in custom format, provide individual formats for date, month and year separated with required character as shown below

print('Custom Date format:', date_time.strftime('%d-%m-%Y'))
print('Time format:', date_time.strftime('%I:%M:%S %p'))

This prints

Custom Date format: 16-07-2021
Time format: 12:17:22 AM

Format codes
Following is a list of format codes supported by strftime() method

FormatDescriptionExample
%aShort name for Weekday(Locale specific)Sun, Mon, …, Sat
(en_US);
So, Mo, …, Sa
(de_DE)
%AFull name for Weekday(Locale specific)Sunday, Monday, …,
Saturday (en_US);
Sonntag, Montag, …,
Samstag (de_DE)
%wNumeric value for weekday, with 0 for Sunday, 1 for Monday and so on0, 1, …, 6
%dDay of the month as a two digit number. Single value  is zero-padded01, 02, …, 31
%bShort name for month(Locale specific)Jan, Feb, …, Dec
(en_US);
Jan, Feb, …, Dez
(de_DE)
%BFull name for month(Locale specific)January, February,
…, December (en_US);
Januar, Februar, …,
Dezember (de_DE)
%mMonth as a two digit number. Single value  is zero-padded01, 02, …, 12
%yYear without century as two digit number. Single values are zero-padded00, 01, …, 99
%YYear with century as four digit number. Values are padded with 0, if required.0001, 0002, …, 2013,
2014, …, 9998, 9999
%HHour in 24-hour clock. Two digit value padded with zero00, 01, …, 23
%IHour in 12-hour clock. Two digit value padded with zero01, 02, …, 12
%pAM or PM(Locale specific)AM, PM (en_US)
am, pm (de_DE)
%MMinute as a two digit number. Single value  is zero-padded00, 01, …, 59
%SSecond as a two digit number. Single value  is zero-padded00, 01, …, 59
%fMicrosecond as a six digit number. Single value  is zero-padded000000, 000001, …,
999999
%zUTC offset in the form
±HHMM[SS[.ffffff]]
(empty), +0000,
-0400, +1030,
+063415,
-030712.345216
%ZTime zone name(empty), UTC, GMT
%jDay of the year as a three digit number, padded with zero, if required.001, 002, …, 366
%UWeek number of the year
(Sunday as the first day of
the week) as a zero padded
decimal number.
00, 01, …, 53
%WWeek number of the year
(Monday as the first day of
the week) as a decimal number.
00, 01, …, 53
%cComplete date and
time(Locale specific)
Tue Aug 16 21:30:00
1988 (en_US);
Di 16 Aug 21:30:00
1988 (de_DE)
%xOnly date(Locale specific)08/16/88 (None);
08/16/1988 (en_US);
16.08.1988 (de_DE)
%XOnly time(Locale specific)21:30:00 (en_US);
21:30:00 (de_DE)
%%A literal '%' character.%

Most of the formats have been demonstrated in the earlier example. Note that many of these format specifiers return Locale specific values.

That is all on Python strftime() function to convert datetime to a string. It can also be used to get current date and time in required format.
Hope the article was useful.