- Included some tests where the week start changes the result.
- Changed wkst parameter to default to the result of
calendar.firstweekday().
- Added examples in the documentation showing cases where
byweekno may yield results from last year and next year.
diff --git a/dateutil.moin b/dateutil.moin
index 46a68b2..6a5da73 100644
--- a/dateutil.moin
+++ b/dateutil.moin
@@ -314,7 +314,9 @@
The week start day. Must be one of the {{{MO}}}, {{{TU}}},
{{{WE}}} constants, or an integer, specifying the first day
of the week. This will affect recurrences based on weekly
- periods.
+ periods. The default week start is got from
+ {{{calendar.firstweekday()}}}, and may be modified by
+ {{{calendar.setfirstweekday()}}}.
count::
How many occurrences will be generated.
@@ -711,6 +713,30 @@
datetime.datetime(1999, 5, 17, 9, 0)]
}}}
+The week number 1 may be in the last year.
+{{{
+>>> list(rrule(FREQ_WEEKLY, count=3, byweekno=1, byweekday=MO, dtstart=parse("19970902T090000")))
+[datetime.datetime(1997, 12, 29, 9, 0),
+ datetime.datetime(1999, 1, 4, 9, 0),
+ datetime.datetime(2000, 1, 3, 9, 0)]
+}}}
+
+And the week numbers greater than 51 may be in the next year.
+{{{
+>>> list(rrule(FREQ_WEEKLY, count=3, byweekno=52, byweekday=SU, dtstart=parse("19970902T090000")))
+[datetime.datetime(1997, 12, 28, 9, 0),
+ datetime.datetime(1998, 12, 27, 9, 0),
+ datetime.datetime(2000, 1, 2, 9, 0)]
+}}}
+
+Only some years have week number 53:
+{{{
+>>> list(rrule(FREQ_WEEKLY, count=3, byweekno=53, byweekday=MO, dtstart=parse("19970902T090000")))
+[datetime.datetime(1998, 12, 28, 9, 0),
+ datetime.datetime(2004, 12, 27, 9, 0),
+ datetime.datetime(2009, 12, 28, 9, 0)]
+}}}
+
Every Friday the 13th, 4 occurrences.
{{{
>>> list(rrule(FREQ_YEARLY, count=4, byweekday=FR, bymonthday=13, dtstart=parse(
diff --git a/dateutil/rrule.py b/dateutil/rrule.py
index 041b0dd..0570a36 100644
--- a/dateutil/rrule.py
+++ b/dateutil/rrule.py
@@ -68,7 +68,7 @@
class rrule:
def __init__(self, freq, dtstart=None,
- interval=1, wkst=0, count=None, until=None, bysetpos=None,
+ interval=1, wkst=None, count=None, until=None, bysetpos=None,
bymonth=None, bymonthday=None, byyearday=None, byeaster=None,
byweekno=None, byweekday=None,
byhour=None, byminute=None, bysecond=None,
@@ -88,7 +88,9 @@
self._interval = interval
self._count = count
self._until = until
- if type(wkst) is int:
+ if wkst is None:
+ self._wkst = calendar.firstweekday()
+ elif type(wkst) is int:
self._wkst = wkst
else:
self._wkst = wkst.weekday
diff --git a/test.py b/test.py
index 4903756..6c5396a 100644
--- a/test.py
+++ b/test.py
@@ -2303,6 +2303,28 @@
until=parse("19970901T090000"))),
[])
+ def testWkStIntervalMO(self):
+ self.assertEqual(list(rrule(FREQ_WEEKLY,
+ count=3,
+ interval=2,
+ byweekday=(TU,SU),
+ wkst=MO,
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 9, 2, 9, 0),
+ datetime(1997, 9, 7, 9, 0),
+ datetime(1997, 9, 16, 9, 0)])
+
+ def testWkStIntervalSU(self):
+ self.assertEqual(list(rrule(FREQ_WEEKLY,
+ count=3,
+ interval=2,
+ byweekday=(TU,SU),
+ wkst=SU,
+ dtstart=parse("19970902T090000"))),
+ [datetime(1997, 9, 2, 9, 0),
+ datetime(1997, 9, 14, 9, 0),
+ datetime(1997, 9, 16, 9, 0)])
+
class ParserTest(unittest.TestCase):
def setUp(self):
self.tzinfos = {"BRST": -10800}