[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

BYDAY semantics issue



>From draft-ietf-calsch-ical-07.txt, from 4.3.10;

   The BYDAY rule part specifies a COMMA character (US-ASCII decimal 44)
   separated list of days of the week; MO, indicates Monday; TU,
   indicates Tuesday; WE, indicates Wednesday; TH, indicates Thursday;
   FR, indicates Friday; SA, indicates Saturday; SU, indicates Sunday.

   Each BYDAY value can also be preceded by a positive (+n) or negative
   (-n) integer. If present, this indicates the nth occurrence of the
   specific day within the MONTHLY or YEARLY RRULE. 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. If an integer modifier is not present, it means all days of
   this type within the specified frequency. For example, within a
   MONTHLY rule, MO represents all Mondays within the month.

There are some examples later on wrt timezones however.  From 4.6.5;

     BEGIN:VTIMEZONE
     TZID:America-New_York
     LAST-MODIFIED:19870101T000000Z
     TZURL:http://zones.stds_r_us.net/tz/America-New_York
     BEGIN:STANDARD
     DTSTART:19671029T020000
     RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
     TZOFFSETFROM:-0400
     TZOFFSETTO:-0500
     TZNAME:EST
     END:STANDARD
     BEGIN:DAYLIGHT
     DTSTART:19870405T020000
     RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
     TZOFFSETFROM:-0500
     TZOFFSETTO:-0400
     TZNAME:EDT
     END:DAYLIGHT
     END:VTIMEZONE

The first RRULE (just to pick one) is clearly *intended* to specify the
last Sunday on the 10th month of every year.

In my first quoted paragraph above, the phrase "MONTHLY or YEARLY RRULE"
therefore confuses me.  I initially believed it to refer to FREQ,
however, clearly BYDAY has to have knowledge that BYMONTH was specified
in order to do its job.  As an example, if the RRULE were
"RRULE:FREQ=YEARLY;BYDAY=-1SU", then that would mean "Last Sunday of
every year" - a yearly period.  However, adding a BYMONTH clause to that
rule changes its period from YEARLY to MONTHLY (at least as far as BYDAY
is concerned).

Therefore, I'd suggest that the use of the terms "MONTHLY rule" and
"YEARLY rule" be changed to less resemble FREQ-specific terminology.

MB
-- 
Mark Baker, CTO, Beduin Communications Corp.
Ottawa, CANADA         http://www.beduin.com