特定の日付のn番目の平日を計算しようとしています。たとえば、特定の日付の月の第3水曜日を計算できるはずです。
私はそれを行うことになっている関数の2つのバージョンを書きました:
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')
両方の関数のロジックは明らかに間違っていますが、バグを見つけることができないようです-誰かがコードの何が悪いのかを見つけることができます-正しい値を返すように修正するにはどうすればよいですか?