Преобразование из строки в datetime, date и time

Преобразование строковых представлений даты и времени в объекты типов datetime, date и time в Python является одной из часто встречающихся задач при работе с данными. Библиотека datetime предоставляет удобные методы для выполнения этой задачи.
Универсального способа сделать одной операцией преобразование из строки в любой из этих трех типов не существует, потому что форматы представления времени различаются. Если дата и время представлены в формате iso, то есть универсальный способ при помощи метода .fromisoformat(), иначе нужно прибегнуть к другому методу: .strptime(). Давайте рассмотрим каждый случай в отдельности.

 

 

 

Преобразование из строки в datetime

Для преобразования строки в тип 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'>

Если вы ошибетесь с указанием формата строки(например перепутайте расположение дня и года, или укажите неправильный разделитель), то получите ошибку.

Преобразование из строки в date

К сожалению, нет метода, который сразу может выполнить такое преобразование. Но мы можем преобразовать сперва в 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

Аналогичная ситуация и со временем: нет метода, который сразу может выполнить такое преобразование. Но мы можем преобразовать той же схемой, только уже нам понадобиться метод .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))

 

Метод .fromisoformat() в Python

Данный  метод преобразования можно использовать для любого из типов 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() и его производные позволяют эффективно управлять и преобразовывать строковые данные в удобные форматы для дальнейшего анализа и обработки.

Перейти к следующему шагу

Комментарии