Как преобразовать строку в объект даты и времени в Python

0 Акции
0
0
0
0

Введение

Модули datetime и time в Python включают метод класса strptime() для преобразования строк в объекты.

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

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

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

datetime.strptime(date_string, format)

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

Более подробную информацию о командах форматирования, используемых в datetime.strptime(), см. в кодах форматирования strftime() и strptime() в документации Python.

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

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

Это соответствует формату, возвращаемому функцией ctime().

Команды форматирования для time.strptime() и time.strftime() одинаковы.

Преобразовать строку в объект 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(), используя формат по умолчанию

Если при преобразовании строки времени в объект time.struct_time() не указать аргумент формата, будет использоваться формат по умолчанию, и возникнет ошибка, если входная строка не будет точно соответствовать формату по умолчанию:

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

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

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)

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

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

Если входную строку невозможно проанализировать с использованием формата, предоставляемого strptime(), возникает исключение ValueError. Вы можете использовать блок try для проверки ошибок разбора, а также блок else для вывода результатов. Сообщения 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'

Результат

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться