Продолжаем цикл статей по управлению датой и временем. На прошлых уроках, мы прошли вводный курс по модулю DateTime, и методу strftime. Сегодня разберем на примерах, как создать объект DateTime из строки.
Метод для создания объекта из строки strptime(). Важно понимать, что мы не можем создавать объект DateTime из любой строки, строка должна иметь определенный формат.
Пример 1. Объект string для DateTime
from datetime import datetime
date_s = "11 June, 2021"
print("date_s =", date_s)
print("Тип date_s =", type(date_s))
date_object = datetime.strptime(date_s, "%d %B, %Y")
print("date_object =", date_object)
print("Тип date_object =", type(date_object))
Результат:
date_s = 11 June, 2021
type of date_s = <class 'str'>
date_object = 2021-06-11 00:00:00
type of date_object = <class 'datetime.datetime'>
Как устроена работа strptime?
Функция strptime принимает два аргумента:
- Строка (которая в итоге преобразуется в дату и время)
- Код формата (все коды формата описаны ниже)
Основываясь на этих двух аргументах, при их правильном формате, метод вернет нам объект DateTime. Разберем визуализацию выше приведенного примера.
- %d — День месяца (01,02,….31)
- %B — Название месяца (Январь, Февраль….Декабрь)
- %Y -Год из четырех цифр (2018,2019,…2021)
Пример 2. Объект string DateTime
from datetime import datetime
dt_s = "12/11/2020 09:15:32"
# Считываем дату в формате dd/mm/yyyy format
dt_object1 = datetime.strptime(dt_s, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)
# Считываем дату в формате mm/dd/yyyy format
dt_object2 = datetime.strptime(dt_s, "%m/%d/%Y %H:%M:%S")
print("dt_object2 =", dt_object2)
Результат:
dt_object1 = 2018-11-12 09:15:32
dt_object2 = 2018-12-11 09:15:32
Список кодов strptime()
Директива | Значение | Пример |
%a | Сокращенное название дня недели. | Вс.Пн.Вт |
%A | Полное название дня недели. | Воскресенье, понедельник |
%w | День недели в виде десятичного числа. | 0,1,2,3,4,5,6 |
%d | День месяца в с добавлением нуля. | 01,02,03,....31 |
%-d | День месяца в виде числа. | 1,2,3,4,5....31 |
%b | Сокращенное название месяца. | Янв.Февр,Мар |
%B | Полное название месяца. | Январь, февраль, Март |
%m | Месяц в виде числа с нулевым заполнением. | 01,02,03...12 |
%-m | Месяц в виде десятичного числа. | 1,2,3,...12 |
%y | Год без столетия как десятичное число с нулевой подкладкой. | 01,02,03...99 |
%-y | Год без столетия как десятичное число. | 1,2,3,...99 |
%Y | Год с веком в виде десятичного числа. | 2010,2011,...2021 |
%H | Час (24-часовые часы) с нулевым заполнением. | 00,01,02,...23 |
%-H | Час (24-часовые часы) как десятичное число. | 1,2,3,...23 |
%I | Час (12-часовые часы) с нулевым заполнением. | 01,02,03,...12 |
%-I | Час (12-часовые часы) как десятичное число. | 1,2,3...12 |
%p | AM/PM | |
%M | Минута в виде числа с нулевым заполнением. | 00,01,02,...59 |
%-M | Минута как десятичное число. | 1,2,3,...59 |
%S | Секунды с нулевым заполнением | 00,01,02,...59 |
%-S | Секунды как десятичное значение | 0,1,2,3...59 |
%f | Микросекунда в виде десятичного числа, слева-ноль. | 000000-999999 |
%z | Смещение UTC в виде +HHMM или -HHMM. | |
%Z | Название часового пояса. | |
%j | День года в виде десятичного числа, дополненного нулем. | 001,002,003,...366 |
%-j | День года в виде десятичного числа. | 1,2,3,....366 |
%U | Номер недели года (воскресенье как первый день недели). Все дни в новом году, предшествующие первому воскресенью, считаются неделей 0. | 00,01,02,..53 |
%W | Номер недели года (понедельник как первый день недели). Все дни в новом году, предшествующие первому понедельнику, считаются неделей 0. | 00,01,02,..53 |
%c | Соответствующее представление даты и времени локали. | Пн 30 сентября 07:06:05 2013 |
%x | Соответствующее представление даты локали. | 09/30/13 |
%X | Соответствующее представление времени локали. | 07:06:05 |
%% | Буквальный символ"%". | % |
ValueError в strptime()
Мы с вами уже определились, что строка передаваемая в качестве аргумента, должна иметь определенный формат. В случае если переданные аргументы в strptime() некорректны, то мы получим ошибку ValueError. Наример:
from datetime import datetime
date_s = "12/11/2018"
date_object = datetime.strptime(date_s, "%d %m %Y")
print("date_object =", date_object)
Результат:
ValueError: time data '12/11/2018' does not match format '%d %m %Y'