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().
Спасибо за чтение, и удачного кодинга!