0

I'm using rrule from python dateutil and don't know how to create an rruleset for the following example:

  • Monday, three weeks in a row. Then a week not, then again three weeks in a row, one not, and so on.

Any advice on creating an rrule(set) for this?

Muling
  • 13
  • 3

1 Answers1

1

One way to do this is to use an rruleset with a WEEKLY rrule and a corresponding exrule for every 4th week:

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))

The result:

[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)]

The way it works is weekly_rule generates one date per week, and the every_4_weeks generates every 4th week, starting with the 4th week after dtstart. That gives you a 3-on 1-off schedule.

Paul
  • 10,381
  • 13
  • 48
  • 86