Преобразование строки Python в дату с помощью Strptime

Преобразование строки Python в дату с помощью Strptime

Python предлагает множество встроенных модулей, которые вы можете включить в свою программу.

Модуль — это файл Python, содержащий код, необходимый для выполнения отдельной функции. Этот файл импортируется в ваше приложение, чтобы помочь вам выполнить определенную задачу.

Одним из таких модулей является модуль datetime для работы и манипулирования временем и датами.

Модуль datetime включает класс datetime, который, в свою очередь, предоставляет метод класса strptime(). Метод strptime() создает объект datetime из строкового представления соответствующей даты и времени.

В этой статье вы узнаете, как использовать метод datetime.strptime() для преобразования строк в объекты datetime.

Давайте же приступим!

Что такое метод datetime.strptime() в Python? Разбивка синтаксиса метода datetime.strptime()

Общий синтаксис метода datetime.strptime() выглядит примерно следующим образом:

datetime.strptime(date_string, format_code)

Давайте разберемся.

Во-первых, datetime - это имя класса.

Затем, strptime() - это имя метода. Метод принимает два обязательных строковых аргумента.

Первым обязательным аргументом является date_string - строковое представление даты, которую вы хотите преобразовать в объект datetime.
Вторым обязательным аргументом является format_code - определенный формат, который поможет вам преобразовать строку в объект времени.

Ниже приведен краткий список наиболее часто используемых форматов кода, с которыми вы можете столкнуться:

%d - день месяца в виде десятичного числа с нулевой добавкой, например 28.
%a - сокращенное название дня, например Sun.
%A - полное название дня, например воскресенье.
%m - месяц в виде десятичного числа с нулевой добавкой, например 01.
%b - сокращенное название месяца, например, янв.
%B - полное название месяца, например, январь.
%y - год без века, например 23.
%Y - год с веком, например 2023.
%H - часы дня в 24-часовом формате, например 08.
%I - часы дня в 12-часовом формате.
%M - минуты в часе, например 20.
%S - секунды в минуте, например 00.

Чтобы просмотреть таблицу с кодами формата для функции datetime.strptime(), обратитесь к документации по Python.

Как использовать метод datetime.strptime() в Python? Как преобразовать строку в объект времени в Python

Допустим, у меня есть следующая строка, которая представляет собой дату и время:

28/01/23  08:20:00

И я хочу получить следующий результат:

2023-01-28 08:20:00

Как мне этого добиться?

Давайте посмотрим на приведенный ниже код:

# import the datetime class from the datetime module
from datetime import datetime

date_time_str = "28/01/23  08:20:00"

# check data type of date_time_str
print(type(date_time_str))

# output

# <class 'str'>

Сначала я импортирую модуль datetime с помощью оператора from datetime import datetime.

Затем я сохраняю строку, которую хочу преобразовать в объект datetime, в переменной с именем date_time_str и проверяю ее тип с помощью функции type(). Результат показывает, что это строка.

Теперь преобразуем строку в объект datetime с помощью метода strptime() класса datetime и проверим тип данных:

from datetime import datetime

date_time_str = "28/01/23  08:20:00"

date_time_object = datetime.strptime(date_time_str, "%d/%m/%y %H:%M:%S")

print(date_time_object)

# check date_time_object_type
print(type(date_time_object))

# output

# 2023-01-28 08:20:00
# <class 'datetime.datetime'>

Коды формата для строки 28/01/23 08:20:00 - %d/%m/%y %H:%M:%S.

Коды формата %d,%m,%y,%H,%M,%S представляют день месяца, месяц как десятичное число с нулевой добавкой, год без века, час дня, минуты дня и секунды дня соответственно.

Теперь давайте немного изменим исходную строку.

Изменим ее с 28/01/23 на 28 января 2023 года и проверим тип данных date_time_str:

from datetime import datetime

date_time_str = "28 January 2023 08:20:00"

#check data type
print(type(date_time_str))

# output

# <class 'str'>

Теперь давайте преобразуем date_time_str в объект datetime - имейте в виду, что поскольку строка отличается, вы также должны изменить коды формата:

from datetime import datetime

date_time_str = "28 January 2023 08:20:00"

date_object = datetime.strptime(date_time_str, "%d %B %Y %H:%M:%S")

print(date_object)

#check data type
print(type(date_object))

# output

# 2023-01-28 08:20:00
# <class 'datetime.datetime'>

Коды формата для строки 28 января 2023 года 08:20:00 - %d %B %Y %H:%M:%S.

Поскольку я изменил месяц января с десятичного представления числа с нулевым добавлением, 01, на его полное название, январь, мне также нужно было изменить его форматный код - с %m на %B.

Как преобразовать строку в объект datetime.date() в Python

Что если вам нужно преобразовать только дату, но не время из строки?

Возможно, вам нужно преобразовать в объект только часть 28/01/23 строки 28/01/23 08:20:00.

Чтобы преобразовать строку в объект даты, вы будете использовать метод strptime(), как вы видели в предыдущем разделе, но вы также будете использовать метод datetime.date() для извлечения только даты.

from datetime import datetime

date_time_str = "28 January 2023 08:20:00"

date_object = datetime.strptime(date_time_str, "%d %B %Y %H:%M:%S").date()

print(date_object)

#check data type
print(type(date_object))

# output

# 2023-01-28
# <class 'datetime.date'>

Как преобразовать строку в объект datetime.time() в Python

А чтобы преобразовать только часть времени,08:20:00 из строки 28/01/23 08:20:00, вы будете использовать метод datetime.time() для извлечения только времени:

from datetime import datetime

date_time_str = "28 January 2023 08:20:00"

date_object = datetime.strptime(date_time_str, "%d %B %Y %H:%M:%S").time()

print(date_object)
print(type(date_object))

# output

# 08:20:00
# <class 'datetime.time'>

Почему при использовании метода datetime.strptime() в Python возникает ошибка ValueError?

Следует помнить, что строка, которую вы передаете в качестве аргумента методу strptime(), должна иметь определенный формат - не любая строка будет преобразована в объект datetime.

В частности, год, месяц и день в строке должны соответствовать коду формата.

Например, код формата для месяца в строке 28/01/23 должен быть %m, который представляет месяц как десятичное число с нулевой добавкой.

Что произойдет, если вместо этого использовать код формата %B?

from datetime import datetime

date_time_str = "28/01/23  08:20:00"

date_time_object = datetime.strptime(date_time_str, "%d/%B/%y %H:%M:%S")

print(date_time_object)

# output

# raise ValueError("time data %r does not match format %r" %
# ValueError: time data '28/01/23  08:20:00' does not match format '%d/%B/%y # %H:%M:%S'

Я получаю ошибку ValueError!

Код формата %B представляет полное название месяца, например, январь, а не 01.

Поэтому, если строка, переданная в strptime(), не соответствует указанному формату, возникает ошибка ValueError.

Чтобы помочь в этом, вы можете проверить и обработать ошибку с помощью блока try-except, например, так:

from datetime import datetime

date_time_str = "28/01/23  08:20:00"

try:
  date_time_object = datetime.strptime(date_time_str, "%d/%B/%y %H:%M:%S")
except ValueError as error:
  print('A ValueError is raised because :', error)
  
# output

# A ValueError is raised because : time data '28/01/23  08:20:00' does not # match format '%d/%B/%y %H:%M:%S'

Заключение

Надеемся, эта статья помогла вам понять, как преобразовать строку в объект времени в Python с помощью метода strptime().

Спасибо за чтение, и удачного кодинга!