Не уверен, что это то, что вы хотите.Я играл с модулем calendar
, и это лучшее, что мне удалось сделать, дайте мне знать:
import calendar
def get_week(y, w):
weeks = [
tuple(w)
for t in cal.yeardatescalendar(y) for month in t for w in month
if w[0].year == y
]
weeks = sorted(list(set(weeks)))
return list(weeks[w-1])
get_week(2017, 13)
Вывод:
[datetime.date(2017, 3, 27),
datetime.date(2017, 3, 28),
datetime.date(2017, 3, 29),
datetime.date(2017, 3, 30),
datetime.date(2017, 3, 31),
datetime.date(2017, 4, 1),
datetime.date(2017, 4, 2)]
Или с функцией datetime.isocalendar()
:
import datetime as dt
def get_week(y, w):
first = next(
(dt.date(y, 1, 1) + dt.timedelta(days=i)
for i in range(367)
if (dt.date(y, 1, 1) + dt.timedelta(days=i)).isocalendar()[1] == w))
return [first + dt.timedelta(days=i) for i in range(7)]
get_week(2017, 13)