您的问题在这里:
adj = temp.weekday()-week_day
首先,您用错误的方式减去东西:您需要从所需的日期减去实际的日期,而不是相反。
其次,您需要确保减法的结果不是负数-应该使用将其放在0-6的范围内% 7
。
结果:
adj = (week_day - temp.weekday()) % 7
此外,在第二个版本中,您需要nth_week-1
像在第一个版本中一样增加几周的时间。
完整的例子:
def nth_weekday(the_date, nth_week, week_day):
temp = the_date.replace(day=1)
adj = (week_day - temp.weekday()) % 7
temp += timedelta(days=adj)
temp += timedelta(weeks=nth_week-1)
return temp
>>> nth_weekday(datetime(2011,8,9), 3, 4)
datetime.datetime(2011, 8, 19, 0, 0)