Превратить строку типа '2021.186' в дату типа '06.07'

Суть в том, что у меня используется первый вариант '2021.186' (где 186 - количество дней, пройденное в году) для работы с sqlite3, а для return (чтобы все было красиво) нужно иметь что-то похожее на 2 вариант '06.07'


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

Автор решения: insolor

С помощью стандартного модуля datetime:

from datetime import datetime, timedelta

s = '2021.186'
year, days = map(int, s.split('.'))
date = datetime(year=year, month=1, day=1) + timedelta(days=days)
print(f"{date:%d.%m.%Y}")

Вывод: 06.07.2021

→ Ссылка
Автор решения: Andy Pavlov

Можно и в одну строку с парсингом через strptime, потом timedelta (т.к. нам нужно смещение в один день) и форматируем дату в строку.

from datetime import datetime, timedelta

date_str = '2021.186'

print((datetime.strptime(date_str, "%Y.%j") + timedelta(days=1)).strftime("%d.%m"))  
# 06.07
→ Ссылка