import datetime
def iso_to_gregorian(iso_year, iso_week, iso_day):
"Gregorian calendar date for the given ISO year, week and day"
fourth_jan = datetime.date(iso_year, 1, 4)
_, fourth_jan_week, fourth_jan_day = fourth_jan.isocalendar()
return fourth_jan + datetime.timedelta(days=iso_day-fourth_jan_day, weeks=iso_week-fourth_jan_week)
Это было адаптировано из очень хорошего ответа @ BenJames. Вам не нужно знать первый день года. Вам просто нужно знать пример даты, которая определенно совпадает с годом ISO, и календарную неделю ISO и день этой даты.
4 января - просто один из примеров, потому что, как указал Бен, 4 января всегда относится к одному и тому же году ISO и григорианскому году и является первым днем года, в котором это делается.
Поскольку недели имеют одинаковую длину, вы можете просто вычесть дни и недели между ISO даты, которую вы хотите, и ISO даты, которую вы знаете в обеих формах, и добавить к этому числу дней и недель. , (Неважно, являются ли эти числа положительными или отрицательными, поэтому вы можете выбрать другой «фиксированный день», например, 28 декабря.)
Редактировать
Я исправил это, потому что, как подсказал @JoSo, первый день григорианского года, который также принадлежит году ISO, - это 4 января, а не 5 января. Как говорится в объяснении, не имеет значения, какая дата выбрана в качестве ориентира, но выбор 4 января делает этот выбор менее «волшебным».