两个相关问题:(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]