Python strftime()

Filed Under: Python

Python strftime() function is present in datetime and time modules to create a string representation based on the specified format string.

Python strftime()

  • Python datetime module strftime() function and time module strftime() function behaves exactly the same. However, their syntax is slightly different.

    Python datetime module strftime() function syntax is:

    
    datetime_object.strftime(format_str)
    

    Python time module strftime() function syntax is:

    
    time.strftime(format_str[, time_object])
    

    This function converts a tuple or struct_time object to a string as specified by the format argument. If ‘time_object’ is not provided, the current time as returned by localtime() is used. The format argument must be a string.

  • For time objects (datetime.time()), the format codes for the year, month, and day should not be used, as time objects have no such values. If they’re used anyway, 1900 is substituted for the year, and 1 for the month and day.
  • For date objects (datetime.date()), the format codes for hours, minutes, seconds, and microseconds should not be used, as date objects have no such values. If they’re used anyway, 0 is substituted for them.

Python strftime() format directives

Following table list outs the most commonly used formatting directive that can be used in format string.

Directive Description Example Output
%a Weekday as locale’s abbreviated name. Sun, Mon, …, Sat (en_US)
So, Mo, …, Sa (de_DE)
%A Weekday as locale’s full name. Sunday, Monday, …, Saturday (en_US)
Sonntag, Montag, …, Samstag (de_DE)
%w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 0, 1, 2, 3, 4, 5, 6
%d Day of the month as a zero-padded decimal number. 01, 02, …, 31
%b Month as locale’s abbreviated name. Jan, Feb, …, Dec (en_US)
Jan, Feb, …, Dez (de_DE)
%B Month as locale’s full name. January, February, …, December (en_US)
Januar, Februar, …, Dezember (de_DE)
%m Month as a zero-padded decimal number. 01, 02 … 12
%y Year without century as a zero-padded decimal number. 01, 02, … 99
%Y Year with century as a decimal number. 0001, 0002, … , 9999
%H Hour (24-hour clock) as a zero-padded decimal number. 01, 02, … , 23
%I Hour (12-hour clock) as a zero-padded decimal number. 01, 02, … , 12
%p Locale’s equivalent of either AM or PM. AM, PM (en_US)
am, pm (de_DE)
%M Minute as a zero-padded decimal number. 01, 02, … , 59
%S Second as a zero-padded decimal number. 01, 02, … , 59
%f Microsecond as a decimal number, zero-padded on the left. 000000, 000001, …, 999999
Not applicable with time module.
%z UTC offset in the form ±HHMM[SS] (empty string if the object is naive). (empty), +0000, -0400, +1030
%Z Time zone name (empty string if the object is naive). (empty), UTC, IST, CST
%j Day of the year as a zero-padded decimal number. 001, 002, …, 366
%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
%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
%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)
%x Locale’s appropriate date representation. 08/16/88 (None)
08/16/1988 (en_US)
16.08.1988 (de_DE)
%X Locale’s appropriate time representation. 21:30:00 (en_US)
21:30:00 (de_DE)
%% A literal ‘%’ character. %

Python strftime() example

datetime module

Let’s look at some examples of using strftime() function with datetime module.


import datetime

dt = datetime.datetime.now()

print('DateTime in Default Formatting:', dt)

print('Formatted DateTime', dt.strftime("%m/%d/%y %H:%M:%S"))

print("Current year:", dt.strftime("%Y"))
print("Month of year:", dt.strftime("%B"))
print("Week number of the year:", dt.strftime("%W"))
print("Weekday of the week:", dt.strftime("%w"))
print("Day of year:", dt.strftime("%j"))
print("Day of the month:", dt.strftime("%d"))
print("Day of week:", dt.strftime("%A"))

Output:


DateTime in Default Formatting: 2018-09-17 12:10:48.081992
Formatted DateTime 09/17/18 12:10:48
Current year: 2018
Month of year: September
Week number of the year: 38
Weekday of the week: 1
Day of year: 260
Day of the month: 17
Day of week: Monday

time module


import time
seconds = time.time()
t = time.localtime(seconds)

print('Time struct_time object:', t)
print('Time object with pre-defined formatting:', time.asctime(t))


print('Formatted Time:', time.strftime("%m/%d/%y %H:%M:%S", t))

print("Current year:", time.strftime("%Y", t))
print("Month of year:", time.strftime("%B", t))
print("Week number of the year:", time.strftime("%W", t))
print("Weekday of the week:", time.strftime("%w", t))
print("Day of year:", time.strftime("%j", t))
print("Day of the month:", time.strftime("%d", t))
print("Day of week:", time.strftime("%A", t))

TimeZone

We know that the default datetime object doesn’t have timezone information, let’s see what is the output if we try to print its timezone.


print("TimeZone:", dt.strftime("%Z"))

Output: TimeZone:

Let’s see the output with time module object.


print("TimeZone:", time.strftime("%Z", t))

Output: TimeZone: IST

We can use pytz module to create a timezone aware datetime object.


import pytz
utc = pytz.utc
dt = datetime.datetime.now(utc)
print("TimeZone:", dt.strftime("%Z"))

Output: TimeZone: UTC

You can checkout complete python script and more Python examples from our GitHub Repository.

References: datetime strftime(), time strftime()

Comments

  1. Vikas says:

    I really like this site. Thanks for doing this. Please don’t stop making articles – I intend to restart with Python learning again. I put this site as my go to zone for learning it.

    Please suggest me some books in addition to your articles – I consider myself as an intermediate student.

    Best regards,

Leave a Reply

Your email address will not be published. Required fields are marked *

close
Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages