如何在dateutil rruleset中正确组合EXRULE与RDATE?
如何在rruleset中正确组合RDATE与EXRULE?
我有一个包含每日重复规则的rruleset,现在尝试将RDATE与EXRULE组合使用。
from dateutil.rrule import rruleset, rrule, DAILY, FR from datetime import datetime rules = rruleset() daily = rrule(freq=DAILY, dtstart=datetime(2022, 10, 12)) rules.rrule(daily) not_on_friday = rrule(freq=DAILY, byweekday=FR, dtstart=datetime(2022, 10, 12)) but_on_friday_21th = datetime(2022, 10, 21) rules.exrule(not_on_friday) rules.rdate(but_on_friday_21th) print(rules.between(datetime(2022,10,12), datetime(2022,10,24)))
输出结果:
[datetime.datetime(2022, 10, 13, 0, 0), datetime.datetime(2022, 10, 15, 0, 0), # 14日已按预期排除 datetime.datetime(2022, 10, 16, 0, 0), datetime.datetime(2022, 10, 17, 0, 0), datetime.datetime(2022, 10, 18, 0, 0), datetime.datetime(2022, 10, 19, 0, 0), datetime.datetime(2022, 10, 20, 0, 0), datetime.datetime(2022, 10, 22, 0, 0), # 但21日也被排除了 datetime.datetime(2022, 10, 23, 0, 0)]
令人困惑的是,当我将EXRULE与EXDATE组合使用时却能正常工作:
from dateutil.rrule import rruleset, rrule, DAILY, FR from datetime import datetime rules = rruleset() daily = rrule(freq=DAILY, dtstart=datetime(2022, 10, 12)) rules.rrule(daily) not_on_friday = rrule(freq=DAILY, byweekday=FR, dtstart=datetime(2022, 10, 12)) but_also_not_on_the_22th_a_saturday = datetime(2022, 10, 22) rules.exrule(not_on_friday) rules.exdate(but_also_not_on_the_22th_a_saturday) print(rules.between(datetime(2022,10,12), datetime(2022,10,24)))
输出结果:
[datetime.datetime(2022, 10, 13, 0, 0), datetime.datetime(2022, 10, 15, 0, 0), # 14日仍被排除 datetime.datetime(2022, 10, 16, 0, 0), datetime.datetime(2022, 10, 17, 0, 0), datetime.datetime(2022, 10, 18, 0, 0), datetime.datetime(2022, 10, 19, 0, 0), datetime.datetime(2022, 10, 20, 0, 0), # 22日也按预期被排除 datetime.datetime(2022, 10, 23, 0, 0)]
那么,如果可行的话,我该如何在rruleset中正确组合RDATE与EXRULE呢?
内容的提问来源于stack exchange,提问作者Jean Zombie
相关产品推荐
相关产品推荐

