Преобразование времени python

У меня есть время в формате строки и его надо преобразовать в формат "ДД.ММ.ГГГГ", т. е. чтобы осталось только "05.08.2021". Все попытки приводят к ошибкам.

И ещё, с символом "T" надо как-нибудь по особенному обращаться или его можно просто заменить на пробел?

Как мне правильно преобразовать строку в время?

Первый вариант

import datetime

day = "2021-08-05T23:56:44.233856"
day_x = datetime.datetime.strptime(day, '%d.%m.%Y').date()

print(day_x)

Второй вариант

import datetime

day = "2021-08-05T23:56:44.233856"
day_x = datetime.datetime.strptime(day, '%d.%m.%Y')

print(day_x)

Возникающая ошибка

ValueError: time data '2021-08-05T23:56:44.233856' does not match format '%d.%m.%Y'

Я пытался заменить "T" на пробел с помощью

day = day.replace('T', ' ')

но ничего не изменилось


Ответы (2 шт):

Автор решения: Roman Konoval

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

Так что, как указал andreymal, нужно правильно задать формат, в котором у вас исходная строка:

day_x = datetime.datetime.strptime(day, '%Y-%m-%dT%H:%M:%S.%f')

Теперь в day_x у вас datetime. Его можно превратить в date:

>>> day_x.date()
datetime.date(2021, 8, 5)

или отформатировать в строку

>>> datetime.datetime.strftime(day_x, '%d.%m.%Y')
'05.08.2021'
→ Ссылка
Автор решения: Andy Pavlov

Как написали Roman Konoval и andreymal можно считать дату и время с помощью datetime.datetime.strptime(), но в данном случае формат даты и времени соответствует ISO 8601, что позволяет использовать встроенный метод datetime.datetime.fromisoformat():

import datetime
dt = datetime.datetime.fromisoformat('2021-08-05T23:56:44.233856')

Дальше уже по классике:

d = datetime.datetime.strftime(dt, '%d.%m.%Y')  # 05.08.2021
→ Ссылка