Получить дату по номеру недели 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)
2 ответа
%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
С модулем isoweek вы можете сделать это с:
from isoweek import Week
d = Week(2011, 40).monday()