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
-
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 ofeucJP,SJIS, orutf-8; uselocale.getlocale()to determine the current locale’s encoding). -
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.
-
When used with the
strptime()method, the%pdirective only affects the output hour field if the%Idirective is used to parse the hour. -
Unlike the
timemodule, thedatetimemodule does not support leap seconds. -
When used with the
strptime()method, the%fdirective accepts from one to six digits and zero pads on the right.%fis an extension to the set of format characters in the C standard (but implemented separately in datetime objects, and therefore always available). -
For a naive object, the
%zand%Zformat codes are replaced by empty strings.
For an aware object:
-
%zutcoffset()is transformed into a string of the form±HHMM[SS[.ffffff]], whereHHis a 2-digit string giving the number of UTC offset hours,MMis a 2-digit string giving the number of UTC offset minutes,SSis a 2-digit string giving the number of UTC offset seconds andffffffis a 6-digit string giving the number of UTC offset microseconds. Theffffffpart is omitted when the offset is a whole number of seconds and both theffffffand theSSpart is omitted when the offset is a whole number of minutes. For example, ifutcoffset()returnstimedelta(hours=-3, minutes=-30),%zis 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'.
-
%ZIn
strftime(),%Zis replaced by an empty string iftzname()returnsNone; otherwise%Zis replaced by the returned value, which must be a string.strptime()only accepts certain values for%Z:any value intime.tznamefor your machine’s localethe hard-coded valuesUTCandGMTSo someone living in Japan may haveJST,UTC, andGMTas valid values, but probably notEST. It will raiseValueErrorfor 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.
-
When used with the
strptime()method,%Uand%Ware only used in calculations when the day of the week and the calendar year (%Y) are specified. -
Similar to
%Uand%W,%Vis only used in calculations when the day of the week and the ISO year (%G) are specified in astrptime()format string. Also note that%Gand%Yare not interchangeable. -
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%ydoes require a leading zero.