Преобразование строковых представлений даты и времени в объекты типов datetime
, date
и time
в Python является одной из часто встречающихся задач при работе с данными. Библиотека datetime предоставляет удобные методы для выполнения этой задачи.
Универсального способа сделать одной операцией преобразование из строки в любой из этих трех типов не существует, потому что форматы представления времени различаются. Если дата и время представлены в формате iso
, то есть универсальный способ при помощи метода .fromisoformat()
, иначе нужно прибегнуть к другому методу: .strptime()
. Давайте рассмотрим каждый случай в отдельности.
Для преобразования строки в тип datetime
необходимо воспользоваться методом .strptime()
объекта datetime.
Стоить отменить, что строка может быть преобразована в datetime если в ней содержится информация о дате и времени. Строка "Лев Толстой" к объекту datetime при всем желании не сможет быть преобразована
Метод strptime
(от английского "string parse time") используется для анализа строки, содержащей дату и/или время, и преобразования её в объект datetime
. strptime
имеет следующий синтаксис:
datetime.strptime(date_string, format)
date_string
- это строка, которую вы хотите преобразовать в объект datetime
format
- это строка формата, которая указывает, как разбирать входную строку. Формат содержит спецификаторы формата, которые определяют, какие части строки представляют год, месяц, день, час, минуты, секунды и другие компоненты времени(см таблицу специальных символов).
Самой важной частью такого преобразования является анализ строки, в которой содержится дата, с целью определения расположений разных компонент даты и времени. К примеру, у нас есть следующая строка
"2023-09-02 15:30:00"
Мы видим, что здесь используется такой формат представления «Год-Месяц-День Часы:Минуты:Секунды». Обратите внимание также и на знаки разделителей, они тоже обязательно должны совпадать. В данном примере дефисы разделяют данные даты, а знак двоеточия стоит между компонент времени
Теперь этот формат представления необходимо перевести на язык специальных символов, приведенных в таблице. Получаем следующий результат
%Y-%m-%d %H:%M:%S
Реализуем теперь это в коде:
from datetime import datetime
date_time_str = "2023-09-02 15:30:00"
date_time_obj = datetime.strptime(date_time_str, "%Y-%m-%d %H:%M:%S")
print(date_time_obj)
# 2023-09-02 15:30:00
print(type(date_time_obj)) # <class 'datetime.datetime'>
Если вы ошибетесь с указанием формата строки(например перепутайте расположение дня и года, или укажите неправильный разделитель), то получите ошибку.
К сожалению, нет метода, который сразу может выполнить такое преобразование. Но мы можем преобразовать сперва в datetime
и потом при помощи метода .date() взять только информацию о дате.
from datetime import datetime
date_string = "02.09.2024"
date_obj = datetime.strptime(date_string, "%d.%m.%Y").date()
print("Объект date:", date_obj) # Объект date 2: 2023-09-02
print(type(date_obj)) # <class 'datetime.date'>
Аналогичная ситуация и со временем: нет метода, который сразу может выполнить такое преобразование. Но мы можем преобразовать той же схемой, только уже нам понадобиться метод .time()
from datetime import datetime
time_string = "15:30:00"
time_obj = datetime.strptime(time_string, "%H:%M:%S").time()
print("Объект time:", time_obj)
print(type(time_obj))
Данный метод преобразования можно использовать для любого из типов datetime
, date
и time
в случае, если в строке содержится iso формат записи.
Вызывать данный метод нужно от того объекта, в который вы хотите преобразовать
Вот преобразование в тип данных date. В данном случае мы вызываем метод .fromisoformat()
от объекта date
from datetime import date
iso_date_str = "2023-09-02"
# Преобразование iso-строки в объект date
date_obj = date.fromisoformat(iso_date_str)
print("Объект date:", date_obj)
print(type(date_obj))
А ниже мы преобразуем iso-строку дата-времени в объект datetime
. В этом же примере внизу я решил показать, что в datetime
можно преобразовать и iso-строку, в которой содержится только дата. Информация о времени там подставится автоматически 00:00:00.
from datetime import datetime
iso_datetime_str = "2023-09-02T15:30:00"
# Преобразование iso-строки в объект datetime
datetime_obj = datetime.fromisoformat(iso_datetime_str)
print("Объект datetime:", datetime_obj)
print(type(datetime_obj))
print()
iso_date_str = "2023-09-02"
dt = datetime.fromisoformat(iso_date_str)
print(dt)
print(type(dt))
Ну и напоследок преобразование iso-строки времени в объект типа time
from datetime import time
iso_time_str = "15:30:00"
# Преобразование iso-строки в объект time
time_obj = time.fromisoformat(iso_time_str)
print("Объект time:", time_obj)
print(type(time_obj))
Мы рассмотрели основные примеры работы с методом strptime()
и его производные позволяют эффективно управлять и преобразовывать строковые данные в удобные форматы для дальнейшего анализа и обработки.