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:
123datetime_object.strftime(format_str)
Python time module strftime() function syntax is:
123time.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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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:
1 2 3 4 5 6 7 8 9 10 11 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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.
1 2 3 |
print("TimeZone:", dt.strftime("%Z")) |
Output: TimeZone:
Let’s see the output with time module object.
1 2 3 |
print("TimeZone:", time.strftime("%Z", t)) |
Output: TimeZone: IST
We can use pytz module to create a timezone aware datetime object.
1 2 3 4 5 6 |
import pytz utc = pytz.utc dt = datetime.datetime.now(utc) print("TimeZone:", dt.strftime("%Z")) |
Output: TimeZone: UTC
References: datetime strftime(), time strftime()