两个相关问题:(1)我使用的所有数据都附有工作日日期。在不同的时刻,我需要知道下个工作日是什么。我写了一些类似下面的代码来做这个决定,但我确信有更好的方法。有人吗?(2)理想情况下,我不仅需要知道下一个工作日,还需要知道下一个美国工作日——也就是说,下一个不是美国市场假日的工作日。在这方面的任何帮助都是很好的。

import datetime as dt

day = dt.datetime.strptime('2012-02-03','%Y-%m-%d').date()
print day#day=2012-03-02 (Friday)

if day.weekday()==4:
    day = day+dt.timedelta(days=3)
else:
    day = day+dt.timedelta(days=1)

print day#day=2012-02-06 (Monday)
day = day+dt.timedelta(days=1)
print day#day=2012-02-07 (Tuesday)

最佳答案

我会使用:

import datetime
from dateutil import rrule


holidays = [
    datetime.date(2012, 5, 1,),
    datetime.date(2012, 6, 1,),
    # ...
]

# Create a rule to recur every weekday starting today
r = rrule.rrule(rrule.DAILY,
                byweekday=[rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR],
                dtstart=datetime.date.today())

# Create a rruleset
rs = rrule.rruleset()

# Attach our rrule to it
rs.rrule(r)

# Add holidays as exclusion days
for exdate in holidays:
    rs.exdate(exdate)


print rs[0]

10-06 13:15