Implemented support for the above in
Data::ICal::DateTime which means that given this bit of iCalendar
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART;TZID=Europe/London:20050804T183000
DTEND;TZID=Europe/London:20050804T230000
SUMMARY:London.pm social
UID:6700873C-0409-11DA-A793-000A9599EB44
SEQUENCE:7
DTSTAMP:20050803T102748Z
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TH
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TH;BYMONTHDAY=8
EXRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TH;BYMONTHDAY=1
DESCRIPTION:We get drunk and talk crap
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/London:20050804T183000
DTEND;TZID=Europe/London:20050804T230000
SUMMARY:London.pm Heretics social
UID:6700873C-0409-11DA-A793-000A9599EB44
SEQUENCE:7
DTSTAMP:20050803T102748Z
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=TH;BYMONTHDAY=1
DESCRIPTION:We get *really* drunk and talk crap
END:VEVENT
END:VCALENDAR
we can now generate the correct sequence of events for London.pm's
hideously complicated meeting
schedule.