One aspect of the representation of rules I find awkward is the notation for the day on which a rule takes effect. There are rules such as "lastSun" or "Sun>=8", etc. While descriptive, they are are hard to process.
Not that hard. And it's a truism that it's better to have the computer do the work than humans.
I would like to suggest a better approach. It takes the form "d op nn", where 'd' is the day-of-week, 0=Sun to 6=Sat 'op' is a comparison code of '<', '=' or '>', and 'nn' is a 2-digit day number (may be 00 or 32)
The comparision code works as follows: '=' nn is an exact value '<' rule describes the last day less than nn '>' rule describes the first day greater than nn
It helps humans to allow ">=" and <=".
Examples:
0>07 first Sun > 7 (same as first Sun >= 8) 0<32 last Sun < 32 (same as "lastSun") 0=27 Sun the 27th of the month
I'm afraid I don't find this better. It's harder to interpret "0" than "Sun". So why not "Sun>07" or "Wed<32"? Any why force the day number to be 2 digits. Does it hurt to allow "Sun>7"?
When a range of years are involved in a rule, there is no exact day-of-week, and in such cases, '9' may be used as a place-holder:
Again, surely "Any" (or even the old standby "*") is better.
9=01 the first day of the month, regardless of what day-of-week it is
"Any=01" But then why not just say "1"?
It is conceivable that 9<nn could be used, but the only case where it would have any merit is in February:
9<32 last day of the month
For months other than Feb, the value is a constant for a given month, and for Feb it depends on the leap-year status. Since no one (that I know of) does anthing about DST in Feb, we can safely eliminate the 9<nn form as well as the 9>nn form.
No, because we don't *know* that nobody will ever introduce "last Thursday in February".
The conversion from existing rules to this format is pretty straightforward:
lastSun 0<32 '32' is constant for 'last'
But, again, what's wrong with "last"?
Sun>=8 0>07 subtract 1 from the tz rule value
If we go your way, what's wrong with "0>=08", or "0>8", or "Sun>8"?
Sun<=21 0<22 add 1 to the tz rule value
Mut.mut.
May 1 1980 4=01 May 1 1980 is a Thursday
But so are many other May 1sts. -- Clive D.W. Feather | Work: <clive@demon.net> | Tel: +44 20 8495 6138 Internet Expert | Home: <clive@davros.org> | Fax: +44 870 051 9937 Demon Internet | WWW: http://www.davros.org | Mobile: +44 7973 377646 THUS plc | |