Преобразование строки в объект времени или даты в Python

Введение

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

Модуль time Python включает функцию time.strptime() для преобразования строки в объект struct_time().

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Преобразование строки в объект datetime с помощью datetime.striptime()

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

Синтаксис метода datetime.strptime() следующий:

datetime.strptime(date_string, format)

Подробнее о datetime.strptime(), вы можете прочитать в разделе Форматы strftime() и strptime() в документации Python.

Пример преобразования строки в объект datetime.datetime()

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

from datetime import datetime

datetime_str = '09/19/22 13:55:26'

datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')

print(type(datetime_object))
print(datetime_object)  # printed in default format

Вывод:

<class 'datetime.datetime'>
2022-09-19 13:55:26

Пример преобразования строки в объект datetime.date()

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

from datetime import datetime

date_str = '09-19-2022'

date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
print(type(date_object))
print(date_object)  # printed in default format

Вывод:

<class 'datetime.date'>
2022-09-19

Пример преобразования строки в объект datetime.time()

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

from datetime import datetime

time_str = '13::55::26'
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
print(type(time_object))
print(time_object)

Вывод:

<class 'datetime.time'>
13:55:26

Пример преобразования строки с локальным форматом даты в объект datetime.datetime()

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

from datetime import datetime
import locale

locale.setlocale(locale.LC_ALL, 'de_DE')
date_str_de_DE = '16-Dezember-2022 Freitag'  # de_DE locale
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)

Вывод:

<class 'datetime.datetime'>
2022-12-16 00:00:00

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

Пример преобразования строки в объект struct_time() с помощью time.strptime()

Синтаксис функции time.strptime() следующий:

time.strptime(time_string[, format])

Метод time.strptime() возвращает объект, совпадающий с time_string, обработанной в соответствии с форматом. Оба аргумента должны быть строковыми. Аргумент time_string обязателен. Если формат не указан, то будет использован вариант по умолчанию:

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

Этот формат соответствует тому, что возвращает функция сtime()

Пример преобразования строки в объект struct_time() с заданным форматом

В следующем примере строка времени преобразуется в объект time.struct_time() с указанием аргумента format. Пример выводит значение полученного объекта:

import time

time_str = '11::33::54'
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object that uses the format provided:")
print(time_obj)

Вывод:

A time.struct_time object that uses the format provided:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
tm_isdst=-1)

Как показано в выводе, при преобразовании строки в объект time.struct_time() функция strptime() использует числа-заглушки для любых значений формата, которые не определены в аргументе format.

Пример преобразования строки в объект struct_time() с использованием формата по умолчанию

В следующем примере строка времени преобразуется в объект time.struct_time(), при этом аргумент format не указывается, поэтому используется формат по умолчанию (%a %b %d %H:%M:%S %Y). Пример выводит значение полученного объекта:

import time

# default format - "%a %b %d %H:%M:%S %Y"
time_str_default = 'Mon Dec 12 14:55:02 2022'
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object that uses the default format:")
print(time_obj_default)

Вывод:

A time.struct_time object that uses the default format:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
tm_isdst=-1)

Устранение ошибок в strptime()

Если аргумент format не указан, а входная строка не соответствует формату по умолчанию, возникает ошибка.

from datetime import datetime
import time

datetime_str = '09/19/18 13:55:26'

try:
    datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
except ValueError as ve1:
    print('ValueError 1:', ve1)

time_str = '99::55::26'

try:
    time_object = time.strptime(time_str, '%H::%M::%S')
except ValueError as ve2:
    print('ValueError 2:', ve2)

Вывод:

ValueError 1: unconverted data remains:  13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'

Заключение

В этом уроке вы узнали несколько способов преобразования строк даты и времени в объекты datetime и time с помощью Python.

Перевод статьи Andrea Anderson «How To Convert a String to a datetime or time Object in Python».