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

При работе с необработанными данными даты часто подаются в виде строчных объектов. Однако строки не позволяют напрямую обращаться к таким атрибутам, как год, месяц или день. Чтобы иметь доступ к этим свойствам, нужно превратить строку в полноценный объект 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 Object 1

Выход:

datetime Object in Python2

Пример: преобразование строки в объект 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 Object in Python 3

Выход:

datetime Object in Python 4

Пример: преобразование строки в объект 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 Object in Python 5

Выход:

datetime Object in Python 6

Пример: преобразование строки в объект 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 Object in Python 7

Примечание: объект 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 обязателен, и оба аргумента должны передаваться в виде строк. Если формат не указан, метод использует формат по умолчанию:

'%a %b %d %H:%M:%S %Y'

Это тот же формат, который возвращает функция 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)

datetime Object in Python 8

Выход:

datetime Object in Python 9

Примечание: при преобразовании в объект 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)

datetime Object in Python 10

Примечание: как и в предыдущем примере, при преобразовании строки для любых отсутствующих директив формата используются стандартные заполнители.

Как устранить ошибки 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)

datetime Object in Python 11

Выход:

datetime Object in Python 12

Выводы

В этом руководстве вы узнали, как преобразовывать строки в объекты date и datetime в Python с помощью метода strptime(). Вы научились работать с разными форматами, разбирать даты, время и даже строки, зависящие от локали. Кроме того, вы ознакомились с распространенными ошибками, такими как несоответствие формата и с тем, как эффективно их устранять.

Обработка преобразований строк в даты – это ключевой навык для работы с временными данными в Python. Понимание кодов форматов и правильное согласование строк с ожидаемыми форматами позволяет уверенно выполнять операции с датами и временем в ваших проектах.

Спасибо за внимание! Надеемся, это руководство поможет вам уверенно работать с мощными библиотеками Python для работы с датами и временем.

Улучшайте свой хостинг вместе с Host-World ! Наслаждайтесь надежными планами VPS от $7.5/месяц или откройте полную мощность выделенных серверов от $99/месяц — все это с круглосуточной профессиональной поддержкой. Поднимите свое онлайн присутствие на новый уровень уже сегодня!

Оставьте свои отзывы

Поделитесь своим мнением и помогите нам стать лучше! Ваши отзывы важны для нас.

Загрузите свою фотографию