Подтвердить что ты не робот

Получить дату с номера недели ISO в Python

Возможный дубликат:
Каков наилучший способ найти обратное к datetime.isocalendar()?

У меня есть номер ISO 8601 и номер недели, и мне нужно перевести это на дату первого дня на этой неделе (понедельник). Как я могу это сделать?

datetime.strptime() принимает директивы %W и %U, но не соблюдает правила дня недели ISO 8601 что datetime.isocalendar() использовать.

Обновление: Python 3.6 поддерживает директивы %G, %V и %U в libc, позволяя этому одностроку:

>>> datetime.strptime('2011 22 1', '%G %V %u')
datetime.datetime(2011, 5, 30, 0, 0)
4b9b3361

Ответ 1

% W берет первый понедельник на неделю 1, но ISO определяет неделю 1, чтобы содержать 4 января. Таким образом, результат

datetime.strptime('2011221', '%Y%W%w')

отключается одним, если первый понедельник и 4 января находятся в разные недели. Последнее относится к случаю, если 4 января - пятница, суббота или воскресенье. Таким образом, следующее должно работать:

from datetime import datetime, timedelta, date
def tofirstdayinisoweek(year, week):
    ret = datetime.strptime('%04d-%02d-1' % (year, week), '%Y-%W-%w')
    if date(year, 1, 4).isoweekday() > 4:
        ret -= timedelta(days=7)
    return ret

Ответ 2

С isoweek module вы можете сделать это с помощью

from isoweek import Week
d = Week(2011, 40).monday()