diff -r 7c48bb929e6e Lib/datetime.py --- a/Lib/datetime.py Tue Mar 27 11:49:21 2012 +0200 +++ b/Lib/datetime.py Wed Mar 28 12:18:37 2012 -0500 @@ -896,6 +896,23 @@ week = 0 return year, week+1, day+1 + @classmethod + def from_iso_week(cls, year, week, day=1): + """Construct a date from ISO year, week number and weekday (default 1) + """ + if not 1 <= day <= 7: + raise ValueError("'day' invalid, acceptable range 1-7") + if not 1 <= week <= 53: + raise ValueError("'week' invalid, accaptable range 1-53") + date = cls(year, 1, 1) + if date.isocalendar()[1] != 1: + if date.weekday() > 3: # Jan 1 is not in week one + date += timedelta(7 - date.weekday()) + date += timedelta(7 * (week - 1)) + if date.isocalendar()[0] != year: + raise ValueError("'week' within range but overflows to next year") + return date +timedelta(day - 1) + # Pickle support. def _getstate(self):