Python: противоположность `datetime.date.isocalendar()`

Модуль datetime предоставляет метод date.isocalendar, который, учитывая дату, возвращает ее в формате ([year], [week], [weekday]). Как мне вернуться назад? Учитывая кортеж ([year], [week], [weekday]), как я могу получить объект date?


person Ram Rachum    schedule 02.03.2011    source источник
comment
Черт возьми, это сложнее, чем я думал сначала. Неделя 1 – это неделя, на которую приходится первый *четверг календарного года!?!   -  person Tim Pietzcker    schedule 02.03.2011
comment
Ха-ха. Добро пожаловать в мир календарей, приятного вам пребывания :)   -  person Ram Rachum    schedule 02.03.2011
comment
У меня есть мучительное подозрение, что есть очень веская причина, по которой этой функции нет в стандартной библиотеке :)   -  person Tim Pietzcker    schedule 02.03.2011


Ответы (1)


EDIT Найденный вопрос с решением: Как лучше всего найти обратную функцию datetime.isocalendar()?

В моем решении были ошибки. В гугле увидел предыдущий вопрос, который после тестирования ниже сработал. (См. верхний ответ на вопрос в приведенной выше ссылке для определения iso_to_gregorian ). (В основном найдите дату начала года iso, а затем используйте timedelta, чтобы найти текущую дату по номеру дня и недели.

for i in range(-10000,10000,1):
    x = datetime.datetime.today().date() + datetime.timedelta(i)
    x_iso = datetime.datetime.isocalendar(x)
    assert iso_to_gregorian(*x_iso) == x
person dr jimbob    schedule 02.03.2011
comment
Попробуйте это на 1999,1,1. У тебя будет недельный отпуск... - person Tim Pietzcker; 02.03.2011
comment
Да, как только я проверил это, я понял, что у меня были ошибки. Обсуждение вопроса о переполнении стека 2008 года рассматривает причины, по которым крайние случаи не работали, и имеет относительно простое решение. - person dr jimbob; 02.03.2011
comment
+1 за правильный ответ :) - person Tim Pietzcker; 02.03.2011
comment
вау, это некрасиво. - person Dan M.; 10.02.2018