Date, Time, TimeDelta

Examples

from datetime import datetime, timedelta
date = datetime.strptime("01.03.2022 22:30", "%d.%m.%Y %H:")  # string parse time
print(datetime.strftime(date, "%d. %b %Y"))         # string format time
date += timedelta(hours=4, minutes=30)

Format Code Table

Directive Meaning Example Notes
%a Weekday as locale’s abbreviated name. (1)
%A Weekday as locale’s full name. (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. (1)
%B Month as locale’s full name. (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. (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 to 6 digits. 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,30712.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 zero-padded 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. (1)
%x Locale’s appropriate date representation. (1)
%X Locale’s appropriate time representation. (1)
%% A literal '%' character. %

Notes

  1. Because the format depends on the current locale, care should be taken when making assumptions about the output value. Field orderings will vary (for example, “month/day/year” versus “day/month/year”), and the output may contain Unicode characters encoded using the locale’s default encoding (for example, if the current locale is ja_JP, the default encoding could be any one of eucJP, SJIS, or utf-8; use locale.getlocale() to determine the current locale’s encoding).

  2. The strptime() method can parse years in the full [1, 9999] range, but years < 1000 must be zero-filled to 4-digit width.

Changed in version 3.2:In previous versions, strftime() method was restricted to years >= 1900.

Changed in version 3.3:In version 3.2, strftime() method was restricted to years >= 1000.

  1. When used with the strptime() method, the %p directive only affects the output hour field if the %I directive is used to parse the hour.

  2. Unlike the time module, the datetime module does not support leap seconds.

  3. When used with the strptime() method, the %f directive accepts from one to six digits and zero pads on the right. %f is an extension to the set of format characters in the C standard (but implemented separately in datetime objects, and therefore always available).

  4. For a naive object, the %z and %Z format codes are replaced by empty strings.

For an aware object:

  • %z

    utcoffset() is transformed into a string of the form ±HHMM[SS[.ffffff]], where HH is a 2-digit string giving the number of UTC offset hours, MM is a 2-digit string giving the number of UTC offset minutes, SS is a 2-digit string giving the number of UTC offset seconds and ffffff is a 6-digit string giving the number of UTC offset microseconds. The ffffff part is omitted when the offset is a whole number of seconds and both the ffffff and the SS part is omitted when the offset is a whole number of minutes. For example, if utcoffset() returns timedelta(hours=-3, minutes=-30), %z is replaced with the string '-0330'.

Changed in version 3.7:The UTC offset is not restricted to a whole number of minutes.

Changed in version 3.7:When the %z directive is provided to the strptime() method, the UTC offsets can have a colon as a separator between hours, minutes and seconds. For example, '+01:00:00' will be parsed as an offset of one hour. In addition, providing 'Z' is identical to '+00:00'.

  • %Z

    In strftime(), %Z is replaced by an empty string if tzname() returns None; otherwise %Z is replaced by the returned value, which must be a string.strptime() only accepts certain values for %Z:any value in time.tzname for your machine’s localethe hard-coded values UTC and GMTSo someone living in Japan may have JST, UTC, and GMT as valid values, but probably not EST. It will raise ValueError for invalid values.

Changed in version 3.2:When the %z directive is provided to the strptime() method, an aware datetime object will be produced. The tzinfo of the result will be set to a timezone instance.

  1. When used with the strptime() method, %U and %W are only used in calculations when the day of the week and the calendar year (%Y) are specified.

  2. Similar to %U and %W, %V is only used in calculations when the day of the week and the ISO year (%G) are specified in a strptime() format string. Also note that %G and %Y are not interchangeable.

  3. When used with the strptime() method, the leading zero is optional for formats %d, %m, %H, %I, %M, %S, %J, %U, %W, and %V. Format %y does require a leading zero.