При работе с необработанными данными даты часто подаются в виде строчных объектов. Однако строки не позволяют напрямую обращаться к таким атрибутам, как год, месяц или день. Чтобы иметь доступ к этим свойствам, нужно превратить строку в полноценный объект datetime, который Python распознает как дату.
Модули Python datetime и time содержат метод strptime(). С его помощью можно разбирать строки с датами и преобразовывать их в объекты типа datetime или struct_time. После преобразования можно легко получить отдельные даты или выполнять различные операции, связанные с датами.
В этом руководстве вы узнаете, как эффективно преобразовывать строку в Python с помощью метода strptime(). Кроме того, мы рассмотрим, как преобразовать строку в объект datetime в Python. Начнем!
Коды форматов для DateTime в Python
Прежде чем перейти к преобразованию строк в даты, следует понять коды форматирования, которые использует модуль datetime. Эти коды являются строительными блоками для разбора и форматирования дат и времени. Ниже приведены наиболее употребительные коды, с которыми вы будете стыкаться:
%Y: означает год в диапазоне от 0001 до 9999.
%m: означает месяц года, значение от 01 до 12.
%d: означает день месяца, значение от 01 до 31.
%H: обозначает час в 24-часовом формате от 00 до 23.
%I: обозначает час в 12-часовом формате от 01 до 12.
%M: обозначает минуты часа от 00 до 59.
%S: обозначает секунды минуты от 00 до 59.
Полный список кодов форматирования можно найти в документации Python в разделе strftime() and strptime() Format Codes.
Преобразование строки в объект datetime в Python с помощью datetime.strptime()
Метод datetime.strptime() имеет следующую синтаксическую форму:
datetime.strptime(date_string, format)
Этот метод преобразует строку с датой в объект datetime в соответствии с указанным форматом. Оба аргумента – date_string и format – являются обязательными и должны передаваться в виде строк.
Пример: преобразование строки в объект datetime.datetime()
Ниже приведен пример, который показывает, как преобразовать строку с датой и временем в объект datetime.datetime. Также выводится тип и значение получаемого объекта:
from datetime import datetime
# Example date and time string
datetime_str = '12/25/23 08:30:00'
# Конвертировать string в datetime object
datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')
# Print the typ and value of the datetime object
print(type(datetime_object))
print(datetime_object) # Output in default format

Выход:

Пример: преобразование строки в объект datetime.date()
Ниже приведен пример того, как преобразовать строку с датой в объект datetime.date. Код выводит тип и значение получаемого объекта:
from datetime import datetime
# Example date string
date_str = '12-31-2023'
# Конвертировать string to a date object
date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
# Print typ and value of date object
print(type(date_object))
print(date_object) # Output in default format

Выход:

Пример: преобразование строки в объект datetime.time()
Этот пример показывает, как преобразовать строку со временем в объект datetime.time. Тип и значение полученного объекта выводятся на экран:
from datetime import datetime
# Example time string
time_str = '22::45::15'
# Конвертировать string to a time object
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
# Print typ and value of time object
print(type(time_object))
print(time_object)

Выход:

Пример: преобразование строки в объект datetime.time()
Этот пример показывает, как преобразовать строку со временем в объект datetime.time. Тип и значение полученного объекта выводятся на экран:
from datetime import datetime
import locale
# Set locale to French
locale.setlocale(locale.LC_ALL, 'fr_FR')
# Example French locale date string
date_str_fr_FR = '25-Decembre-2023 Lundi' # fr_FR locale
# Конвертировать string в datetime object
datetime_object = datetime.strptime(date_str_fr_FR, '%d-%B-%Y %A')
# Print the typ and value of the datetime object
print(type(datetime_object))
print(datetime_object)

Примечание: объект datetime.datetime() не сохраняет имя дня недели (Lundi в этом примере) из исходной строки. Он сохраняет день недели внутренне как числовое значение.
Преобразование строки в объект struct_time с помощью time.strptime()
Метод time.strptime() используется для разбора строки и преобразования ее в объект time.struct_time. Его синтаксис таков:
time.strptime(time_string[, format])
Этот метод возвращает объект time.struct_time, соответствующий заданным параметрам time_string и format. Аргумент time_string обязателен, и оба аргумента должны передаваться в виде строк. Если формат не указан, метод использует формат по умолчанию:
Это тот же формат, который возвращает функция ctime(). Директивы форматирования, используемые в time.strptime(), согласуются с применяемыми в time.strftime(). Более подробно об этом можно узнать в официальной документации Python к модулю time.
Пример: преобразование строки в объект struct_time() с пользовательским форматом
Ниже приведен пример преобразования строки со временем в объект time.struct_time с помощью собственного формата:
import time
# Example time string
time_str = '10::45::30'
# Convert to struct_time object using a custom format
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object using the provided format:")
print(time_obj)

Выход:

Примечание: при преобразовании в объект time.struct_time любые не указанные директивы формата заполняются стандартными значениями-заполнителями.
Пример: преобразование строки в объект struct_time() с использованием формата по умолчанию
Если формат не задан, метод time.strptime() применяет формат по умолчанию ('%a %b %d %H:%M:%S %Y'). Если входная строка не совпадает с этим форматом точно, будет сгенерирована ошибка.
import time
# Example time string matching the default format
time_str_default = 'Tue Mar 14 12:15:45 2023'
# Convert to struct_time object using the default format
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object using the default format:")
print(time_obj_default)

Примечание: как и в предыдущем примере, при преобразовании строки для любых отсутствующих директив формата используются стандартные заполнители.
Как устранить ошибки strptime()?
При использовании метода strptime() возникает ошибка ValueError, если входная строка не соответствует ожидаемому формату. Чтобы корректно обработать такие ошибки, можно использовать блок try для проверки разбора и блок except для перехвата и вывода сообщения об ошибке. Сообщения ValueError от strptime() четко объясняют причину сбоя разбора.
Ниже приведен пример, демонстрирующий типичные проблемы, например несоответствие формата или наличие лишних данных:
from datetime import datetime
import time
# Example 1: Обработанный формат для datetime
datetime_str = '05-25-2023 08:30:00'
try:
datetime_object = datetime.strptime(datetime_str, '%m/%d/%Y')
except ValueError as ve1:
print('Error 1:', ve1)
# Example 2: Invalid time string
time_str = '12:70:50'
try:
time_object = time.strptime(time_str, '%H:%M:%S')
except ValueError as ve2:
print('Error 2:', ve2)

Выход:

Выводы
В этом руководстве вы узнали, как преобразовывать строки в объекты date и datetime в Python с помощью метода strptime(). Вы научились работать с разными форматами, разбирать даты, время и даже строки, зависящие от локали. Кроме того, вы ознакомились с распространенными ошибками, такими как несоответствие формата и с тем, как эффективно их устранять.
Обработка преобразований строк в даты – это ключевой навык для работы с временными данными в Python. Понимание кодов форматов и правильное согласование строк с ожидаемыми форматами позволяет уверенно выполнять операции с датами и временем в ваших проектах.
Спасибо за внимание! Надеемся, это руководство поможет вам уверенно работать с мощными библиотеками Python для работы с датами и временем.
Улучшайте свой хостинг вместе с Host-World ! Наслаждайтесь надежными планами VPS от $7.5/месяц или откройте полную мощность выделенных серверов от $99/месяц — все это с круглосуточной профессиональной поддержкой. Поднимите свое онлайн присутствие на новый уровень уже сегодня!