我正在尝试计算给定日期的第n个工作日。例如,我应该能够计算某个日期所在月份的第三个星期三。
我已经编写了两个版本的函数来实现这个目标:
from datetime import datetime, timedelta
### version 1
def nth_weekday(the_date, nth_week, week_day):
temp = the_date.replace(day=1)
adj = (nth_week-1)*7 + temp.weekday()-week_day
return temp + timedelta(days=adj)
### version 2
def nth_weekday(the_date, nth_week, week_day):
temp = the_date.replace(day=1)
adj = temp.weekday()-week_day
temp += timedelta(days=adj)
temp += timedelta(weeks=nth_week)
return temp
控制台输出
# Calculate the 3rd Friday for the date 2011-08-09
x=nth_weekday(datetime(year=2011,month=8,day=9),3,4)
print 'output:',x.strftime('%d%b%y')
# output: 11Aug11 (Expected: '19Aug11')
这两个函数的逻辑明显是错误的,但我似乎找不到错误所在 - 有谁能发现代码中的问题并指导我如何修复以返回正确的值吗?
19Aug11
。 - Homunculus Reticulliadj
始终为正(因为你只是添加了n-1周) - 如果进行减法操作,则无法保证它始终为正! - tzelleke