Освоение Python strptime(): точное парсинг дат из строк
Метод strptime() в Python: преобразование строк в объекты datetime
Это руководство показывает, как создавать объекты datetime из строк с помощью метода datetime.strptime(), с практическими примерами и полным справочником кодов форматирования.
Видео: Работа с датами и временем в Python
Посмотрите официальное руководство Python для углубленного понимания работы с модулем datetime.
Метод strptime() создает объект datetime из строки, соответствующей указанному формату.
Важно: Не каждую строку можно распарсить; входная строка должна в точности соответствовать коду форматирования.
Пример 1: Преобразование простой строки даты
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
print("Тип date_string =", type(date_string))
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
print("Тип date_object =", type(date_object))
Результат выполнения:
date_string = 21 June, 2018 Тип date_string = <class 'str'> date_object = 2018-06-21 00:00:00 Тип date_object = <class 'datetime.datetime'>
Как работает strptime()
Классовый метод strptime() принимает два аргумента:
- Строку для парсинга.
- Код форматирования, описывающий структуру строки.
На основе этих данных метод возвращает объект datetime, представляющий тот же момент времени.
В примере выше код форматирования %d %B, %Y означает:
%d— день месяца с ведущим нулем (01–31).%B— полное название месяца (Январь–Декабрь).%Y— год из четырёх цифр.
Пример 2: Парсинг неоднозначных дат
from datetime import datetime
dt_string = "12/11/2018 09:15:32"
# Предполагаем формат день/месяц/год
dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)
# Предполагаем формат месяц/день/год
dt_object2 = datetime.strptime(dt_string, "%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()
Таблица ниже суммирует все директивы, которые можно использовать с strptime(). Для полной документации обратитесь к официальному руководству по модулю datetime в Python.
| Директива | Значение | Пример |
|---|---|---|
%a | Сокращенное название дня недели | Пн, Вт, ... |
%A | Полное название дня недели | Понедельник, Вторник, ... |
%w | День недели как число (0=воскресенье) | 0, 1, ..., 6 |
%d | День месяца (с нулем) | 01, 02, ..., 31 |
%-d | День месяца (без нуля) | 1, 2, ..., 30 |
%b | Сокращенное название месяца | Янв, Фев, ..., Дек |
%B | Полное название месяца | Январь, Февраль, ... |
%m | Номер месяца (с нулем) | 01, 02, ..., 12 |
%-m | Номер месяца (без нуля) | 1, 2, ..., 12 |
%y | Год без века (с нулем) | 00, 01, ..., 99 |
%-y | Год без века (без нуля) | 0, 1, ..., 99 |
%Y | Год с веком | 2013, 2024, ... |
%H | Час (24-ч, с нулем) | 00, 01, ..., 23 |
%-H | Час (24-ч, без нуля) | 0, 1, ..., 23 |
%I | Час (12-ч, с нулем) | 01, 02, ..., 12 |
%-I | Час (12-ч, без нуля) | 1, 2, ..., 12 |
%p | AM/PM в соответствии с локалью | AM, PM |
%M | Минуты (с нулем) | 00, 01, ..., 59 |
%-M | Минуты (без нуля) | 0, 1, ..., 59 |
%S | Секунды (с нулем) | 00, 01, ..., 59 |
%-S | Секунды (без нуля) | 0, 1, ..., 59 |
%f | Микросекунды (с нулями) | 000000 – 999999 |
%z | Смещение UTC (+HHMM или –HHMM) | +0300 |
%Z | Название часового пояса | MSK |
%j | День года (с нулями) | 001, 002, ..., 366 |
%-j | День года (без нулей) | 1, 2, ..., 366 |
%U | Номер недели (воскресенье первый) | 00, 01, ..., 53 |
%W | Номер недели (понедельник первый) | 00, 01, ..., 53 |
%c | Дата и время локали | Вт 12 июн 09:55:22 2018 |
%x | Дата локали | 06/12/18 |
%X | Время локали | 09:55:22 |
%% | Буквальный знак процента | % |
Частая ошибка: ValueError
Если строка и код форматирования не совпадают, strptime() вызывает исключение ValueError. Например:
from datetime import datetime
date_string = "12/11/2018" # Неверный формат — ожидается день месяц год
date_object = datetime.strptime(date_string, "%d %m %Y")
print("date_object =", date_object)
Запуск этого кода вызывает:
ValueError: time data '12/11/2018' does not match format '%d %m %Y'
Рекомендуемое чтение: Python strftime()
Python
- Ключевые слова и идентификаторы в Python: мастерство зарезервированных слов и соглашений об именовании
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Словари в Python: создание, манипуляции и продвинутые техники
- Итераторы в Python: как они работают и как создать свои
- Замыкания в Python: как вложенные функции захватывают переменные
- Регулярные выражения в Python (модуль re) — практическое руководство
- Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам