Введение
В этой статье вы узнаете, как использовать функцию 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».