Формат для функций .strftime() и .strptime(). модуля datetime
Все объекты datetime.date()
, datetime.datetime()
и datetime.time()
поддерживают 2 метода преобразования строки в объект даты/времени и наоборот объекта даты/времени - в человекочитаемою строку:
метод
.strftime(format)
создает строку, представляющую дату/время под контролем явной строки форматаformat
.метод
.strptime(format)
создает соответствующий объект даты/времени из строки, соответствующей форматуformat
.
Строковой аргумент format
составляется в соответствии с правилами форматирования даты/времени из кодов, представленных в таблице ниже.
Смотрите примеры форматирования объектов модуля datetime
в строки с датой и временем, а так же преобразования из строки в объекты модуля datetime
.
Правила форматирования strftime()
и strptime()
.
strftime()
и strptime()
.Ниже приведен список всех кодов форматирования, которые требуются в стандарте языка C 1989 года, они работают на всех платформах со стандартной реализацией C.
Код | Значение | Пример | Замечания |
---|---|---|---|
| Сокращенное название дня недели в локали по умолчанию. | Sun, Mon, …, Sat (en_US); So, Mo, …, Sa (de_DE) | (1) |
| Полное название дня недели в локали по умолчанию. | Sunday, Monday, …, Saturday (en_US); Sonntag, Montag, …, Samstag (de_DE) | (1) |
| День недели как число, где 0 это Воскресение и 6 — суббота. | 0, 1, …, 6 | |
| День месяца в виде десятичного числа с нулем. | 01, 02, …, 31 | (9) |
| Месяц как сокращенное название в локали по умолчанию. | Jan, Feb, …, Dec (en_US);Jan, Feb, …, Dez (de_DE) | (1) |
| Месяц как полное название в локали по умолчанию. | January, February, …, December (en_US);Januar, Februar, …, Dezember (de_DE) | (1) |
| Месяц в виде десятичного числа с добавлением нуля. | 01, 02, …, 12 | (9) |
| Год без столетия как десятичное число с нулем. | 00, 01, …, 99 | (9) |
| Год с веком как десятичное число. | 0001, 0002, …, 2013, 2014, …, 9998, 9999 | (2) |
| Час (24-часовой формат) в виде десятичного числа с добавлением нуля. | 00, 01, …, 23 | (9) |
| Час (12-часовые часы) в виде десятичного числа с добавлением нуля. | 01, 02, …, 12 | (9) |
| Локальный эквивалент либо AM, либо PM. | AM, PM (en_US);am, pm (de_DE) | (1), (3) |
| Минута как десятичное число с добавлением нуля. | 00, 01, …, 59 | (9) |
| Секунда как дополненное нулями десятичное число. | 00, 01, …, 59 | (4), (9) |
| Микросекунда как десятичное число, дополненное нулями слева. | 000000, 000001, …, 999999 | (5) |
| Смещение UTC в форме `±HHMM[SS[.ffffff]]` или пустая строка, если объект наивный. | (empty), +0000, -0400, +1030, +063415, -030712.345216 | (6) |
| Имя часового пояса или пустая строка, если объект наивный. | (empty), UTC, EST, CST | |
| День года в виде десятичного числа с нулем. | 001, 002, …, 366 | (9) |
| Номер недели в году (воскресенье - первый день недели) в виде десятичного числа с добавлением нуля. Все дни в новом году, предшествующем первому воскресенью, считаются на неделе 0. | 00, 01, …, 53 | (7), (9) |
| Номер недели в году (понедельник - первый день недели) в виде десятичного числа. Все дни в новом году, предшествующем первому понедельнику, считаются на неделе 0. | 00, 01,…, 53 | (7), (9) |
| Соответствие локали дате и времени. | Tue Aug 16 21:30:00 1988 (en_US); Di 16 Aug 21:30:00 1988 (de_DE) | (1) |
| Соответствующее представление даты локали. | 08/16/88 (None);08/16/1988 (en_US);16.08.1988 (de_DE) | (1) |
| Соответствующее время локали. | 21:30:00 (en_US);21:30:00 (de_DE) | (1) |
| Буквальный символ '%'. | % |
Несколько дополнительных директив, не требуемых стандартом C89, включены для удобства. Все эти параметры соответствуют значениям даты ISO 8601.
Код | Значение | Пример | Замечания |
---|---|---|---|
| ISO 8601 год со столетием, который содержит большую часть недели ISO (%V). | 0001, 0002, …, 2013, 2014, …, 9998, 9999 | (8) |
| ISO 8601 День недели в виде десятичного числа, где 1 - понедельник. | 1, 2, …, 7 | |
| ISO 8601 неделя в виде десятичного числа с понедельником в качестве первого дня недели. Неделя 01 - неделя, содержащая 4 января. | 01, 02, …, 53 | (8), (9) |
Дополнительные директивы могут быть недоступны на всех платформах при использовании с методом .strftime()
. Коды ISO 8601 year
и ISO 8601 week
не являются взаимозаменяемыми с указанными выше директивами о номере года и недели. Вызов strptime()
с неполными или неоднозначными директивами ISO 8601 вызовет исключение ValueError
.
Полный набор поддерживаемых кодов формата варьируется в зависимости от платформы, потому что Python вызывает функцию strftime()
библиотеки языка С. Чтобы увидеть полный набор кодов формата, поддерживаемых на вашей платформе, обратитесь к документации.
Технические детали.
Вообще, метод d.strftime(fmt)
действует как time.strftime()
модуля time
time.strftime(fmt, d.timetuple())
, хотя не все объекты поддерживают метод timetuple()
.
Использование datetime.datetime.strptime(date_string, format)
эквивалентно:
За исключением случаев, когда формат включает субсекундные компоненты или информацию о смещении часового пояса, которые поддерживаются в конструкторе datetime.datetime.strptime, но отбрасываются time.strptime.
Для объектов datetime.date()
не следует использовать коды формата для часов, минут, секунд и микросекунд, поскольку объекты даты не имеют таких значений. Если они все равно используются, то они заменяется 0.
По той же причине обработка строк формата, содержащих кодовые точки Unicode, которые не могут быть представлены в кодировке текущей локали, также зависит от платформы. На некоторых платформах такие кодовые точки сохраняются без изменений в выводе, в то время как на других, метод .strftime()
может вызывать исключение UnicodeError
или возвращать пустую строку.
Замечания:
Поскольку формат зависит от текущей локали, необходимо соблюдать осторожность при предположении о выходном значении. Порядок полей будет различаться, например “month/day/year” или “day/month/year”, а выходные данные могут содержать символы Юникода, закодированные с использованием кодировки по умолчанию для локали (например, если текущим языковым стандартом является ja_JP, Кодировка по умолчанию может быть любой из
eucJP
,SJIS
илиutf-8
. Используйте функциюlocale.getlocale()
для определения кодировки текущей локали.Метод
.strptime()
может анализировать годы во всем диапазоне[1, 9999]
, но годы< 1000
должны быть заполнены нулями до ширины из 4 цифр.При использовании с методом
.strptime()
код форматирования%p
влияет только на поле выходного часа, если код форматирования%I
используется для анализа часа.В отличие от модуля
time
, модульdatetime
не поддерживает високосные секунды.При использовании с методом
.strptime()
код форматирования%f
принимает от одной до шести цифр и ноль справа. Код%f
является расширением набора символов формата в стандарте C, но реализовано отдельно в объектахdatetime
и поэтому всегда доступно.Для "наивного" объекта, коды формата
%z
и%Z
заменяются пустыми строками. Для "осведомленного объекта":%z
-utcoffset()
преобразуется в строку вида±HHMM[SS[.ffffff]]
, гдеHH
- это двухзначная строка, указывающая количество часов смещения UTC,MM
- двузначная строка, указывающая номер смещения UTC. Минут,SS
- это двузначная строка, указывающая количество секунд смещения UTC, аffffff
- это шестизначная строка, указывающая число микросекунд смещения UTC. Частьffffff
опускается, когда смещение составляет целое число секунд, а частьffffff
иSS
опускается, когда смещение составляет целое число минут. Например, еслиutcoffset()
возвращаетtimedelta(hours=-3, minutes=-30)
, то%z
заменяется строкой'-0330'
.%Z
- Еслиtzname()
возвращаетNone
, то%Z
заменяется пустой строкой. В противном случае%Z
заменяется возвращаемым значением, которое должно быть строкой.
При использовании метода
.strptime()
коды%U
и%W
используются только в вычислениях, если указаны день недели и календарный год%Y
.Похожий на коды форматирования
%U
и%W
, код%V
используется только в вычислениях, когда день недели и год ISO%G
указываются в строке формата.strptime()
. Также обратите внимание, что коды%G
и%Y
не являются взаимозаменяемыми.При использовании с методом
.strptime()
начальный ноль необязателен для форматов%d
,%m
,%H
,%I
,%M
,%S
,%J
,%U
,%W
и%V
. Формат%y
требует начального нуля.
Примеры форматирования строки и преобразования из строки.
Форматирования datetime.datetime()
в строку c датой и временем:
Преобразование строки с датой и временем в объект datetime.datetime()
:
Преобразование datetime.datetime()
в строку для базы данных:
Преобразование datetime.date()
в строку для базы данных:
Преобразование строки из базы данных в datetime.datetime()
:
Преобразование строки из базы данных в datetime.date()
`:
datetime.date()
`:Last updated