Преобразование времени 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 шт):
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'
Как написали 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