Subject: Questions regarding recurrence rules

From: Reinhold Kainhofer <[email-masked]>
Date: Tue, 31 May 2005 15:59:12 +0200

Hi Guys,
I have few questions regarding details of recurrence rules of rfc 2445. (Sorry 
if I may sound more clueless than I really am. I have my assumptions, but I 
don't want to influence any answers by bringing too much of my own arguments 
and thoughts).

1) About the BYDAY rule part: Let's start with some examples
  RRULE:FREQ=YEARLY;BYDAY=3SU
Okay, that's the third sunday of the year. But what exactly is
  RRULE:FREQ=YEARLY;BYDAY=5SU;BYMONTH=2
Is this the fith sunday in the year, if it is also in february? Or is it the 
fifth sunday in february? And it can be even less clear from rfc 2445. What 
is
  RRULE:FREQ=YEARLY;BYDAY=5SU;BYMONTH=2,7
Is this the fifth sunday of the year, if it's in either February or July? 
Or is it the fifth sunday of both february and July?
Or is it the fifth sunday of febrary and july together (i.e. in feb if the feb 
in a leap year has 5 sundays, or the first sunday of july in all other 
years)?

If you think it's the latter, think about the following rule:
  RRULE:FREQ=YEARLY;BYWEEKNO=4;BYDAY=5SU
Is it the fifth sunday of all sundays that are in week #4? Or is it the fifth 
sunday of the year if it is also in week #4?

Also, what does this rule mean:
  RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU;BYYEARDAY=72
I suppose it doesn't mean the 72th day of the year, if that's the 2nd sunday 
in March. Is there any way to express that recurrence in an RRULE?

Also notice that rfc 2445 says "For example, within
   a MONTHLY rule, +1MO (or simply 1MO) represents the first Monday
   within the month, whereas -1MO represents the last Monday of the
   month. ". So what does 
  RRULE:FREQ=MONTHLY;BYYEARDAY=57,64;BYDAY=-1MO
mean? The last monday of each month if it's also day #57 or #64 of the year 
(which the quote implies), or the last monday each month in the set of all 
days #57 and #64 of the year. In particular, in 2007, would the recurrence 
set be Feb 27 (=#57 of the year, and the last monday in february) without any 
occurence in march (march 5 is day #64, but it's not the last monday in the 
month, since rfc 2445 says -1MO means last monday of the month)? Or would it 
be Feb 27 (day #57 of the year, and last monday of all dates that match the 
BYYEARDAY in the february interval) and March 4 ( day #64 of the year and 
last monday of all dates in March that match the BYYEARDAY).

2) In Section 4.3.10 RFC 2445 says "The COUNT rule part defines the number of 
occurrences at which to range-bound the recurrence. The "DTSTART" property 
value, if specified, counts as the first occurrence.". So look at this rrule:
DTSTART;TZID=whatever:20050530T120000
RRULE:FREQ=WEEKLY;COUNT=3;BYMONTH=6
The resulting recurrence dates would be
  1) 20050530
  2) 20050630
  3) 20060630

Now if the DTSTART is not specified the quote from above would imply that the 
start doesn't count as a recurrence, so looking at
DTEND;TZID=whatever:20050530T150000
DURATION:PT3H
RRULE:FREQ=WEEKLY;COUNT=3;BYMONTH=6
would give the following resulting recurrence dates?
  1) 20050530 (DTSTART is always the first occurence, )
  2) 20050630
  3) 20060630
  4) 20070630 (DTSTART doesn't count towards COUNT)

3) About the DTSTART and recurrence rules: Is the DTSTART always taken to 
match the rule (even if it doesn't fulfil the BY* parts)? In particular this 
is important for EXRULES: Is the DTSTART always the first occurence of the 
EXRULE? If that's the case, the DTSTART will always be excluded as soon as at 
least one EXRULE is present. 
And since exceptions overrule inclusions, there's no way to have an occurence 
on the DTSTART in that case... Is this really the intended behaviour?

Thanks a lot already for your clarifications / discussions.

Cheers,
Reinhold

-- 
------------------------------------------------------------------
Reinhold Kainhofer, Vienna University of Technology, Austria
email: [email-masked], http://reinhold.kainhofer.com/
 * Financial and Actuarial Mathematics, TU Wien, http://www.fam.tuwien.ac.at/
 * K Desktop Environment, http://www.kde.org, KOrganizer / KPilot maintainer