The day of the week (as an integer) is returned by the weekday method :
import datetime as DT
dow = dict(zip('monday tuesday wednesday thursday friday saturday sunday'.split(),
range(7)))
def getDateFromDayOf(dateTimeObj, reqDayOf):
weekday = dateTimeObj.weekday()
return dateTimeObj + DT.timedelta(days=(dow[reqDayOf.lower()]-weekday-1)%7+1)
In [90]: getDateFromDayOf(DT.datetime.now(), 'Monday').date()
Out[90]: datetime.date(2013, 4, 8)
In [91]: getDateFromDayOf(DT.datetime.now(), 'Tuesday').date()
Out[91]: datetime.date(2013, 4, 9)
In [92]: getDateFromDayOf(DT.datetime.now(), 'Friday').date()
Out[92]: datetime.date(2013, 4, 12)
Or using dateutil ,
import datetime as DT
import dateutil
import dateutil.relativedelta as rdelta
import dateutil.rrule as rrule
dow = dict(zip('monday tuesday wednesday thursday friday saturday sunday'.split(),
(getattr(rdelta, d) for d in 'MO TU WE TH FR SA SU'.split())))
def getDateFromDayOf(dateTimeObj, reqDayOf):
rr = rrule.rrule(
rrule.DAILY,
byweekday = dow[reqDayOf.lower()],
dtstart = dateTimeObj)
res = rr.after(dateTimeObj, inc=False)
return res
dateutil, , ,
DT.timedelta(days=(dow[reqDayOf.lower()]-weekday-1)%7+1)