【问题标题】:rrule weekly for three weeks, then one week not, repeat每周规则,持续三周,然后一周不规则,重复
【发布时间】:2018-04-11 01:33:22
【问题描述】:

我正在使用来自 python dateutilrrule,但不知道如何为以下示例创建 rruleset:

  • 星期一,连续三周。然后一周没有,然后连续三周,一个没有,依此类推。

关于为此创建 rrule(set) 有什么建议吗?

【问题讨论】:

    标签: python python-dateutil rrule


    【解决方案1】:

    一种方法是使用 rrulesetWEEKLY rrule 以及每 4 周对应的 exrule:

    from dateutil.rrule import rrule, rruleset
    from dateutil.rrule import WEEKLY
    
    from dateutil.relativedelta import relativedelta
    from datetime import datetime, timedelta
    
    dtstart = datetime(2011, 1, 1)
    
    rrset = rruleset()
    
    weekly_rule = rrule(freq=WEEKLY, dtstart=dtstart)
    every_4_weeks = rrule(freq=WEEKLY, interval=4,
                          dtstart=dtstart + relativedelta(weeks=4))
    
    rrset.rrule(weekly_rule)
    rrset.exrule(every_4_weeks)
    
    rrset.between(dtstart, dtstart + timedelta(days=65))
    

    结果:

    [datetime.datetime(2011, 1, 8, 0, 0),
     datetime.datetime(2011, 1, 15, 0, 0),
     datetime.datetime(2011, 1, 22, 0, 0),
     datetime.datetime(2011, 2, 5, 0, 0),
     datetime.datetime(2011, 2, 12, 0, 0),
     datetime.datetime(2011, 2, 19, 0, 0),
     datetime.datetime(2011, 3, 5, 0, 0)]
    

    它的工作方式是weekly_rule 每周生成一个日期,every_4_weeks 每 4 周生成一次,从dtstart 之后的第 4 周开始。这为您提供了一个 3-on 1-off 的时间表。

    【讨论】:

    • 谢谢!这完美地工作。我也可以将其用作其他类似规则集的基础。
    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多