Erik Cederstrand Erik Cederstrand - 1 year ago 184
Python Question

Get date from ISO week number in Python

Possible Duplicate:

What’s the best way to find the inverse of datetime.isocalendar()?

I have a year and an ISO week number, and I need to translate this to the date of the first day in that week (Monday). How can I do this?

datetime.strptime() takes both a
and a
directive, but neither adheres to the ISO weekday rules that datetime.isocalendar() use.

Update: Python 3.6 will support the
directives also present in libc, allowing this:

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

Answer Source

%W takes the first Monday to be in week 1 but ISO defines week 1 to contain 4 January. So the result from

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

is off by one iff the first Monday and 4 January are in different weeks. The latter is the case if 4 January is a Friday, Saturday or Sunday. So the following should work:

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
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download