Введение
Модули Python datetime
и time
включают метод класса strptime()
для преобразования строк в объекты.
В этой статье вы будете использовать strptime()
для преобразования строк в объекты datetime
и struct_time()
.
Развертывайте ваши приложения Python из GitHub с помощью DigitalOcean App Platform. Позвольте DigitalOcean масштабировать ваше приложение.
Преобразование строки в объект datetime
с использованием datetime.strptime()
Синтаксис метода datetime.strptime()
выглядит следующим образом:
datetime.strptime(date_string, format)
Метод datetime.strptime()
возвращает объект datetime
, соответствующий date_string, разобранной с использованием формата. Оба аргумента являются обязательными и должны быть строками.
Для получения подробной информации о директивах формата, используемых в 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) # выведено в формате по умолчанию
Результат:
<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) # выведено в формате по умолчанию
Результат:
<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
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.struct_time()
, который соответствует time_string, разобранной с помощью формата. time_string обязателен, и оба аргумента должны быть строками. Если формат не предоставлен, то по умолчанию используется:
'%a %b %d %H:%M:%S %Y'
Это соответствует формату, возвращаемому функцией ctime()
.
Директивы формата такие же для time.strptime()
и time.strftime()
. Узнайте больше о директивах формата для модуля time
в документации Python.
Пример преобразования строки в объект struct_time()
с указанным форматом
Следующий пример преобразует строку времени в объект time.struct_time()
, предоставляя аргумент формат, и выводит значение полученного объекта:
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()
использует заполнитель для любых директив формата, которые не определены в аргументе формата.
Пример преобразования строки в объект struct_time()
с использованием формата по умолчанию
Если вы не указываете аргумент format при преобразовании строки времени в объект time.struct_time()
, то используется формат по умолчанию, и возникает ошибка, если входная строка не точно соответствует формату по умолчанию:
'%a %b %d %H:%M:%S %Y'
В следующем примере строка времени преобразуется в объект time.struct_time()
без указания аргумента format, и выводится значение результирующего объекта:
import time
# формат по умолчанию - "%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)
Как показано в выводе, при преобразовании строки в объект time.struct_time()
метод strptime()
использует заполнители для любых директив формата, которые не определены в аргументе format или в формате по умолчанию, если аргумент format не указан.
Устранение ошибок strptime()
Если входная строка не может быть разобрана с помощью strptime()
с использованием предоставленного формата, то возникает ValueError
. Вы можете использовать блок try
для проверки ошибок разбора, вместе с блоком except
для вывода результатов. Сообщения об ошибках ValueError
, которые вы получаете при использовании метода strptime()
, четко объясняют корневые причины ошибок разбора. В следующем примере показаны некоторые распространенные ошибки, такие как лишние данные и несоответствие форматов:
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. Продолжайте обучение с дополнительными учебными пособиями по Python.
Source:
https://www.digitalocean.com/community/tutorials/python-string-to-datetime-strptime