diff --git a/autotests/data/Compat-libical3/AppleICal_1.5.ics.ical.ref b/autotests/data/Compat-libical3/AppleICal_1.5.ics.ical.ref index dca8c1646..0173bc89c 100644 --- a/autotests/data/Compat-libical3/AppleICal_1.5.ics.ical.ref +++ b/autotests/data/Compat-libical3/AppleICal_1.5.ics.ical.ref @@ -1,1645 +1,1645 @@ BEGIN:VCALENDAR PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN VERSION:2.0 X-KDE-ICAL-IMPLEMENTATION-VERSION:1.0 X-WR-CALNAME:YES2 BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE:19760926T010000 RDATE:19770925T030000 RDATE:19781001T030000 RDATE:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE:19770403T020000 RDATE:19780402T020000 RDATE:19790401T020000 RDATE:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339E8C-873F-11D8-92F9-0003939BE42C SEQUENCE:12 LAST-MODIFIED:20171125T103857Z DESCRIPTION:To be run on the PR-Z32-EA-ST\nfrom www.diamondsystems.com SUMMARY:Identify OS PRIORITY:1 DUE;TZID=UTC:20040218T000000 DTSTART;TZID=UTC:20040218T000000 COMPLETED:20040218T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76337B22-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z DESCRIPTION:reply YGT\nCover Letter\nAcquintances at ESA\nDivers conseils juges applicables.\n\nPiece jointe:\nbulletin ing1 et ing2 SUMMARY:max@mail DUE;TZID=UTC:20031102T000000 DTSTART;TZID=UTC:20031102T000000 COMPLETED:20031101T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633A0F7-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Process Methodlogy\nreference documents\nCD burned and Mil STDC498 + ECSS\n\nFirst iteration on Feb the 16 SUMMARY:Process to be identified PRIORITY:1 DUE;TZID=UTC:20040223T000000 DTSTART;TZID=UTC:20040223T000000 COMPLETED:20040316T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339BFF-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z DESCRIPTION:from ecss.nl SUMMARY:download ECSSE40B DUE;TZID=UTC:20040214T000000 DTSTART;TZID=UTC:20040214T000000 COMPLETED:20040215T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:763385DA-873F-11D8-92F9-0003939BE42C SEQUENCE:11 LAST-MODIFIED:20171125T103857Z SUMMARY:YGT PRIORITY:1 DUE;TZID=UTC:20031105T000000 DTSTART;TZID=UTC:20031105T000000 COMPLETED:20031104T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339258-873F-11D8-92F9-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:preparation YGT DUE;TZID=UTC:20031102T000000 DTSTART;TZID=UTC:20031102T000000 COMPLETED:20031102T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633972E-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Linux and realtime + LDP ressources\n+ emailing the libkemo sources SUMMARY:massimo@mail PRIORITY:2 DUE;TZID=UTC:20040210T000000 DTSTART;TZID=UTC:20040210T000000 COMPLETED:20040209T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76337E10-873F-11D8-92F9-0003939BE42C SEQUENCE:7 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Critique livre\npassage a Paris SUMMARY:Philippe@mail DUE;TZID=UTC:20031105T000000 DTSTART;TZID=UTC:20031105T000000 COMPLETED:20031108T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76338D89-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:Demander fichiers a Morten DUE;TZID=Europe/Paris:20030730T182805 DTSTART;TZID=Europe/Paris:20030730T182805 COMPLETED:20030729T220000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:0BAF1084-C081-11D8-B7A8-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:Lire FEMA §12 PRIORITY:2 DUE;TZID=UTC:20040619T000000 DTSTART;TZID=UTC:20040619T000000 COMPLETED:20040624T220000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633A988-873F-11D8-92F9-0003939BE42C SEQUENCE:10 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Applicables standards\nfor software in YES2\nProcess\nGant\nMisc docs\nECSS SUMMARY:Prepare CDROM PRIORITY:2 DUE;TZID=UTC:20040220T000000 DTSTART;TZID=UTC:20040220T000000 COMPLETED:20040323T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633834F-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:Demander Posix a Morten PRIORITY:1 DUE;TZID=Europe/Paris:20030730T182727 DTSTART;TZID=Europe/Paris:20030730T182727 COMPLETED:20030729T220000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:3A7EA64C-92FA-11D8-AE57-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:RTEMS PRIORITY:1 DUE;TZID=UTC:20040421T000000 DTSTART;TZID=UTC:20040421T000000 COMPLETED:20040420T220000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:00D31906-DA0E-11D8-A5F0-0003939BE42C SEQUENCE:2 LAST-MODIFIED:20171125T103857Z SUMMARY:Massimo DURATION:PT30M DTSTART;TZID=Europe/Paris:20040720T090000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633A3E6-873F-11D8-92F9-0003939BE42C SEQUENCE:13 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 RRULE:FREQ=WEEKLY;UNTIL=20040719T180000Z;BYDAY=MO,WE,FR;WKST=SU EXDATE;TZID=Europe/Paris:20040705T183000 EXDATE;TZID=Europe/Paris:20040707T183000 EXDATE;TZID=Europe/Paris:20040709T183000 EXDATE;TZID=Europe/Paris:20040714T183000 EXDATE;TZID=Europe/Paris:20040721T183000 DURATION:PT1H30M DTSTART;TZID=Europe/Paris:20040303T183000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633A3E6-873F-11D8-92F9-0003939BE42C SEQUENCE:7 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 RECURRENCE-ID;TZID=Europe/Paris:20040315T183000 DURATION:PT2H15M DTSTART;TZID=Europe/Paris:20040315T183000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76338FE5-873F-11D8-92F9-0003939BE42C SEQUENCE:2 LAST-MODIFIED:20171125T103857Z SUMMARY:Noordwijk DURATION:PT0S DTSTART;VALUE=DATE:20040104 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339986-873F-11D8-92F9-0003939BE42C SEQUENCE:9 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 RRULE:FREQ=WEEKLY;UNTIL=20040717T160000Z EXDATE;TZID=Europe/Paris:20040710T110000 DURATION:PT7H DTSTART;TZID=Europe/Paris:20040306T110000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339986-873F-11D8-92F9-0003939BE42C SEQUENCE:9 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 RECURRENCE-ID;TZID=Europe/Paris:20040424T110000 DURATION:PT8H DTSTART;TZID=Europe/Paris:20040424T100000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76338AC4-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:consulat Neerlandais DURATION:PT1H30M DTSTART;TZID=Europe/Paris:20031029T090000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:2ED4A368-A59B-11D8-98F5-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:DL015 DURATION:PT2H15M DTSTART;TZID=Europe/Paris:20040517T094500 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76337877-873F-11D8-92F9-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:OCL DURATION:PT2H30M DTSTART;TZID=Europe/Paris:20031124T093000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:9260F168-9630-11D8-9373-0003939BE42C SEQUENCE:1 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 DURATION:PT8H DTSTART;TZID=Europe/Paris:20040425T100000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:763372EC-873F-11D8-92F9-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:Revue DURATION:PT5H30M DTSTART;TZID=Europe/Paris:20031125T120000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7A14E757-B078-11D8-B41D-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:Ellen DURATION:PT30M DTSTART;TZID=Europe/Paris:20040528T100000 TRANSP:OPAQUE BEGIN:VALARM ATTACH:file: //localhost/Users/piou/Music/iTunes/iTunes%20Music/Depeche%20Mode/Singles% 2081-85/Its%20Called%20A%20Heart.mp3 ACTION:PROCEDURE TRIGGER:-PT2M X-KDE-KCALCORE-ENABLED:TRUE X-WR-ALARMID:PROCALARM END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:763394BC-873F-11D8-92F9-0003939BE42C SEQUENCE:6 LAST-MODIFIED:20171125T103857Z SUMMARY:Rosetta :-) DURATION:PT1H30M DTSTART;TZID=Europe/Paris:20040226T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:763380B5-873F-11D8-92F9-0003939BE42C SEQUENCE:6 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Thalys #09333\n2eme classe non fumeur couloir SUMMARY:Train LOCATION:Gare du Nord STATUS:CONFIRMED DURATION:PT3H32M DTSTART;TZID=Europe/Paris:20040105T125500 TRANSP:OPAQUE END:VEVENT END:VCALENDAR diff --git a/autotests/data/Compat-libical3/Evolution_2.8.2_timezone_test.ics.ical.ref b/autotests/data/Compat-libical3/Evolution_2.8.2_timezone_test.ics.ical.ref index 63fdc0216..898b2f5a9 100644 --- a/autotests/data/Compat-libical3/Evolution_2.8.2_timezone_test.ics.ical.ref +++ b/autotests/data/Compat-libical3/Evolution_2.8.2_timezone_test.ics.ical.ref @@ -1,135 +1,135 @@ BEGIN:VCALENDAR PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN VERSION:2.0 X-KDE-ICAL-IMPLEMENTATION-VERSION:1.0 X-LibKCal-Testsuite-OutTZ:Europe/London BEGIN:VTIMEZONE TZID:GM BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:+0000 TZOFFSETTO:-0400 DTSTART:19700426T070000 RDATE:19700426T070000 END:DAYLIGHT BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:20081102T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 END:STANDARD BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:19701025T020000 -RRULE:FREQ=YEARLY;UNTIL=20071104T020000;COUNT=37;BYDAY=-1SU;BYMONTH=10 +RRULE:FREQ=YEARLY;UNTIL=20071104T020000;BYDAY=-1SU;BYMONTH=10 RDATE:20061029T020000 END:STANDARD BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19760425T020000 -RRULE:FREQ=YEARLY;UNTIL=19870405T020000;COUNT=11;BYDAY=-1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=19870405T020000;BYDAY=-1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19880403T020000 -RRULE:FREQ=YEARLY;UNTIL=20070311T020000;COUNT=19;BYDAY=1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=20070311T020000;BYDAY=1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:20080309T020000 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19710425T020000 RDATE:19710425T020000 RDATE:19720430T020000 RDATE:19730429T020000 RDATE:19740106T020000 RDATE:19750223T020000 RDATE:19860427T020000 RDATE:20060402T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:GM BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:+0000 TZOFFSETTO:-0400 DTSTART:19700426T070000 RDATE:19700426T070000 END:DAYLIGHT BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:20081102T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 END:STANDARD BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:19701025T020000 -RRULE:FREQ=YEARLY;UNTIL=20071104T020000;COUNT=37;BYDAY=-1SU;BYMONTH=10 +RRULE:FREQ=YEARLY;UNTIL=20071104T020000;BYDAY=-1SU;BYMONTH=10 RDATE:20061029T020000 END:STANDARD BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19760425T020000 -RRULE:FREQ=YEARLY;UNTIL=19870405T020000;COUNT=11;BYDAY=-1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=19870405T020000;BYDAY=-1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19880403T020000 -RRULE:FREQ=YEARLY;UNTIL=20070311T020000;COUNT=19;BYDAY=1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=20070311T020000;BYDAY=1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:20080309T020000 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19710425T020000 RDATE:19710425T020000 RDATE:19720430T020000 RDATE:19730429T020000 RDATE:19740106T020000 RDATE:19750223T020000 RDATE:19860427T020000 RDATE:20060402T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20070128T021124Z CREATED:20070128T021013Z UID:20070127T211005Z-13428-100-1-0@emsig SEQUENCE:2 LAST-MODIFIED:20070128T021124Z SUMMARY:Nominal is 1200 to 1230 _GMT_ on 27 Jan 2007 DTSTART;TZID=GM:20070127T120000 DTEND;TZID=GM:20070127T123000 TRANSP:OPAQUE END:VEVENT END:VCALENDAR diff --git a/autotests/data/Compat-libical3/Mozilla_1.0.ics.ical.ref b/autotests/data/Compat-libical3/Mozilla_1.0.ics.ical.ref index b443dbb4b..d9f8078af 100644 --- a/autotests/data/Compat-libical3/Mozilla_1.0.ics.ical.ref +++ b/autotests/data/Compat-libical3/Mozilla_1.0.ics.ical.ref @@ -1,305 +1,305 @@ BEGIN:VCALENDAR PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN VERSION:2.0 X-KDE-ICAL-IMPLEMENTATION-VERSION:1.0 BEGIN:VTIMEZONE TZID:GM BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:+0000 TZOFFSETTO:-0400 DTSTART:19700426T070000 RDATE:19700426T070000 END:DAYLIGHT BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:20081102T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 END:STANDARD BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:19701025T020000 -RRULE:FREQ=YEARLY;UNTIL=20071104T020000;COUNT=37;BYDAY=-1SU;BYMONTH=10 +RRULE:FREQ=YEARLY;UNTIL=20071104T020000;BYDAY=-1SU;BYMONTH=10 RDATE:20061029T020000 END:STANDARD BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19760425T020000 -RRULE:FREQ=YEARLY;UNTIL=19870405T020000;COUNT=11;BYDAY=-1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=19870405T020000;BYDAY=-1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19880403T020000 -RRULE:FREQ=YEARLY;UNTIL=20070311T020000;COUNT=19;BYDAY=1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=20070311T020000;BYDAY=1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:20080309T020000 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19710425T020000 RDATE:19710425T020000 RDATE:19720430T020000 RDATE:19730429T020000 RDATE:19740106T020000 RDATE:19750223T020000 RDATE:19860427T020000 RDATE:20060402T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:GM BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:+0000 TZOFFSETTO:-0400 DTSTART:19700426T070000 RDATE:19700426T070000 END:DAYLIGHT BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:20081102T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 END:STANDARD BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:19701025T020000 -RRULE:FREQ=YEARLY;UNTIL=20071104T020000;COUNT=37;BYDAY=-1SU;BYMONTH=10 +RRULE:FREQ=YEARLY;UNTIL=20071104T020000;BYDAY=-1SU;BYMONTH=10 RDATE:20061029T020000 END:STANDARD BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19760425T020000 -RRULE:FREQ=YEARLY;UNTIL=19870405T020000;COUNT=11;BYDAY=-1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=19870405T020000;BYDAY=-1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19880403T020000 -RRULE:FREQ=YEARLY;UNTIL=20070311T020000;COUNT=19;BYDAY=1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=20070311T020000;BYDAY=1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:20080309T020000 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19710425T020000 RDATE:19710425T020000 RDATE:19720430T020000 RDATE:19730429T020000 RDATE:19740106T020000 RDATE:19750223T020000 RDATE:19860427T020000 RDATE:20060402T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:GM BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:+0000 TZOFFSETTO:-0400 DTSTART:19700426T070000 RDATE:19700426T070000 END:DAYLIGHT BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:20081102T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 END:STANDARD BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:19701025T020000 -RRULE:FREQ=YEARLY;UNTIL=20071104T020000;COUNT=37;BYDAY=-1SU;BYMONTH=10 +RRULE:FREQ=YEARLY;UNTIL=20071104T020000;BYDAY=-1SU;BYMONTH=10 RDATE:20061029T020000 END:STANDARD BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19760425T020000 -RRULE:FREQ=YEARLY;UNTIL=19870405T020000;COUNT=11;BYDAY=-1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=19870405T020000;BYDAY=-1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19880403T020000 -RRULE:FREQ=YEARLY;UNTIL=20070311T020000;COUNT=19;BYDAY=1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=20070311T020000;BYDAY=1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:20080309T020000 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19710425T020000 RDATE:19710425T020000 RDATE:19720430T020000 RDATE:19730429T020000 RDATE:19740106T020000 RDATE:19750223T020000 RDATE:19860427T020000 RDATE:20060402T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:GM BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:+0000 TZOFFSETTO:-0400 DTSTART:19700426T070000 RDATE:19700426T070000 END:DAYLIGHT BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:20081102T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 END:STANDARD BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 DTSTART:19701025T020000 -RRULE:FREQ=YEARLY;UNTIL=20071104T020000;COUNT=37;BYDAY=-1SU;BYMONTH=10 +RRULE:FREQ=YEARLY;UNTIL=20071104T020000;BYDAY=-1SU;BYMONTH=10 RDATE:20061029T020000 END:STANDARD BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19760425T020000 -RRULE:FREQ=YEARLY;UNTIL=19870405T020000;COUNT=11;BYDAY=-1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=19870405T020000;BYDAY=-1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19880403T020000 -RRULE:FREQ=YEARLY;UNTIL=20070311T020000;COUNT=19;BYDAY=1SU;BYMONTH=4 +RRULE:FREQ=YEARLY;UNTIL=20070311T020000;BYDAY=1SU;BYMONTH=4 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:20080309T020000 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 DTSTART:19710425T020000 RDATE:19710425T020000 RDATE:19720430T020000 RDATE:19730429T020000 RDATE:19740106T020000 RDATE:19750223T020000 RDATE:19860427T020000 RDATE:20060402T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO DTSTAMP:20171006T143852Z CREATED:20171006T143852Z UID:26110226-9e9e-11d8-90c9-e6c8f9becdf7 LAST-MODIFIED:20171006T143852Z SUMMARY:Call Beacon to transfer funds STATUS:NEEDS-ACTION CLASS:PRIVATE DUE;TZID=GM:20040505T111500 DTSTART;TZID=GM:20040505T101500 PERCENT-COMPLETE:0 END:VTODO BEGIN:VEVENT DTSTAMP:20040503T202715Z CREATED:20171006T143852Z UID:918141053 LAST-MODIFIED:20040503T202715Z SUMMARY:Performance with Anne LOCATION:Raleigh STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=UTC:20040523T170000 DTEND;TZID=UTC:20040523T200000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171006T143852Z X-MOZILLA-ALARM-DEFAULT-LENGTH:0 CREATED:20171006T143852Z UID:896c9eb4-1dd2-11b2-b487-b1bef43989c3 LAST-MODIFIED:20171006T143852Z DESCRIPTION:15-501 E Durham\, lt Easttowne Dr\, 3rd left Providence\, 3rd drive rt\, up on ste 200 SUMMARY:Dental Exam STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=GM:20040510T090000 DTEND;TZID=GM:20040510T110000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171006T143852Z CREATED:20171006T143852Z UID:9387e0e8-9ea1-11d8-86ed-b77ddbb7d081 LAST-MODIFIED:20171006T143852Z SUMMARY:Yemassee Graduation STATUS:CONFIRMED CLASS:PRIVATE DURATION:PT0S DTSTART;VALUE=DATE:20040528 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20040504T211728Z CREATED:20171006T143852Z UID:06ef0474-1dd2-11b2-853d-cc63771f70dd LAST-MODIFIED:20040504T211728Z SUMMARY:Convivium at 2707 Anderson Dr\, Raleigh\, 27608 STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=UTC:20040516T200000 DTEND;TZID=UTC:20040516T220000 TRANSP:OPAQUE END:VEVENT END:VCALENDAR diff --git a/autotests/data/Compat/AppleICal_1.5.ics.ical.ref b/autotests/data/Compat/AppleICal_1.5.ics.ical.ref index 8a48f48c5..20ae23550 100644 --- a/autotests/data/Compat/AppleICal_1.5.ics.ical.ref +++ b/autotests/data/Compat/AppleICal_1.5.ics.ical.ref @@ -1,1645 +1,1645 @@ BEGIN:VCALENDAR PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN VERSION:2.0 X-KDE-ICAL-IMPLEMENTATION-VERSION:1.0 X-WR-CALNAME:YES2 BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0000 TZOFFSETTO:+0200 DTSTART:19760328T000000 RDATE;VALUE=DATE-TIME:19760328T000000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19760926T010000 RDATE;VALUE=DATE-TIME:19760926T010000 RDATE;VALUE=DATE-TIME:19770925T030000 RDATE;VALUE=DATE-TIME:19781001T030000 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19770403T020000 RDATE;VALUE=DATE-TIME:19770403T020000 RDATE;VALUE=DATE-TIME:19780402T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT END:VTIMEZONE BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339E8C-873F-11D8-92F9-0003939BE42C SEQUENCE:12 LAST-MODIFIED:20171125T103857Z DESCRIPTION:To be run on the PR-Z32-EA-ST\nfrom www.diamondsystems.com SUMMARY:Identify OS PRIORITY:1 DUE;TZID=UTC:20040218T000000 DTSTART;TZID=UTC:20040218T000000 COMPLETED:20040218T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76337B22-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z DESCRIPTION:reply YGT\nCover Letter\nAcquintances at ESA\nDivers conseils juges applicables.\n\nPiece jointe:\nbulletin ing1 et ing2 SUMMARY:max@mail DUE;TZID=UTC:20031102T000000 DTSTART;TZID=UTC:20031102T000000 COMPLETED:20031101T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633A0F7-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Process Methodlogy\nreference documents\nCD burned and Mil STDC498 + ECSS\n\nFirst iteration on Feb the 16 SUMMARY:Process to be identified PRIORITY:1 DUE;TZID=UTC:20040223T000000 DTSTART;TZID=UTC:20040223T000000 COMPLETED:20040316T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339BFF-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z DESCRIPTION:from ecss.nl SUMMARY:download ECSSE40B DUE;TZID=UTC:20040214T000000 DTSTART;TZID=UTC:20040214T000000 COMPLETED:20040215T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:763385DA-873F-11D8-92F9-0003939BE42C SEQUENCE:11 LAST-MODIFIED:20171125T103857Z SUMMARY:YGT PRIORITY:1 DUE;TZID=UTC:20031105T000000 DTSTART;TZID=UTC:20031105T000000 COMPLETED:20031104T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339258-873F-11D8-92F9-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:preparation YGT DUE;TZID=UTC:20031102T000000 DTSTART;TZID=UTC:20031102T000000 COMPLETED:20031102T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633972E-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Linux and realtime + LDP ressources\n+ emailing the libkemo sources SUMMARY:massimo@mail PRIORITY:2 DUE;TZID=UTC:20040210T000000 DTSTART;TZID=UTC:20040210T000000 COMPLETED:20040209T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76337E10-873F-11D8-92F9-0003939BE42C SEQUENCE:7 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Critique livre\npassage a Paris SUMMARY:Philippe@mail DUE;TZID=UTC:20031105T000000 DTSTART;TZID=UTC:20031105T000000 COMPLETED:20031108T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76338D89-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:Demander fichiers a Morten DUE;TZID=Europe/Paris:20030730T182805 DTSTART;TZID=Europe/Paris:20030730T182805 COMPLETED:20030729T220000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:0BAF1084-C081-11D8-B7A8-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:Lire FEMA §12 PRIORITY:2 DUE;TZID=UTC:20040619T000000 DTSTART;TZID=UTC:20040619T000000 COMPLETED:20040624T220000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633A988-873F-11D8-92F9-0003939BE42C SEQUENCE:10 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Applicables standards\nfor software in YES2\nProcess\nGant\nMisc docs\nECSS SUMMARY:Prepare CDROM PRIORITY:2 DUE;TZID=UTC:20040220T000000 DTSTART;TZID=UTC:20040220T000000 COMPLETED:20040323T230000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633834F-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:Demander Posix a Morten PRIORITY:1 DUE;TZID=Europe/Paris:20030730T182727 DTSTART;TZID=Europe/Paris:20030730T182727 COMPLETED:20030729T220000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VTODO DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:3A7EA64C-92FA-11D8-AE57-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:RTEMS PRIORITY:1 DUE;TZID=UTC:20040421T000000 DTSTART;TZID=UTC:20040421T000000 COMPLETED:20040420T220000Z PERCENT-COMPLETE:100 STATUS:COMPLETED END:VTODO BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:00D31906-DA0E-11D8-A5F0-0003939BE42C SEQUENCE:2 LAST-MODIFIED:20171125T103857Z SUMMARY:Massimo DURATION:PT30M DTSTART;TZID=Europe/Paris:20040720T090000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633A3E6-873F-11D8-92F9-0003939BE42C SEQUENCE:13 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 RRULE:FREQ=WEEKLY;UNTIL=20040719T180000Z;BYDAY=MO,WE,FR;WKST=SU EXDATE;TZID=Europe/Paris:20040705T183000 EXDATE;TZID=Europe/Paris:20040707T183000 EXDATE;TZID=Europe/Paris:20040709T183000 EXDATE;TZID=Europe/Paris:20040714T183000 EXDATE;TZID=Europe/Paris:20040721T183000 DURATION:PT1H30M DTSTART;TZID=Europe/Paris:20040303T183000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7633A3E6-873F-11D8-92F9-0003939BE42C SEQUENCE:7 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 RECURRENCE-ID;TZID=Europe/Paris:20040315T183000 DURATION:PT2H15M DTSTART;TZID=Europe/Paris:20040315T183000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76338FE5-873F-11D8-92F9-0003939BE42C SEQUENCE:2 LAST-MODIFIED:20171125T103857Z SUMMARY:Noordwijk DURATION:PT0S DTSTART;VALUE=DATE:20040104 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339986-873F-11D8-92F9-0003939BE42C SEQUENCE:9 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 RRULE:FREQ=WEEKLY;UNTIL=20040717T160000Z EXDATE;TZID=Europe/Paris:20040710T110000 DURATION:PT7H DTSTART;TZID=Europe/Paris:20040306T110000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76339986-873F-11D8-92F9-0003939BE42C SEQUENCE:9 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 RECURRENCE-ID;TZID=Europe/Paris:20040424T110000 DURATION:PT8H DTSTART;TZID=Europe/Paris:20040424T100000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76338AC4-873F-11D8-92F9-0003939BE42C SEQUENCE:4 LAST-MODIFIED:20171125T103857Z SUMMARY:consulat Neerlandais DURATION:PT1H30M DTSTART;TZID=Europe/Paris:20031029T090000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:2ED4A368-A59B-11D8-98F5-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:DL015 DURATION:PT2H15M DTSTART;TZID=Europe/Paris:20040517T094500 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:76337877-873F-11D8-92F9-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:OCL DURATION:PT2H30M DTSTART;TZID=Europe/Paris:20031124T093000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:9260F168-9630-11D8-9373-0003939BE42C SEQUENCE:1 LAST-MODIFIED:20171125T103857Z SUMMARY:YES2 DURATION:PT8H DTSTART;TZID=Europe/Paris:20040425T100000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:763372EC-873F-11D8-92F9-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:Revue DURATION:PT5H30M DTSTART;TZID=Europe/Paris:20031125T120000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:7A14E757-B078-11D8-B41D-0003939BE42C SEQUENCE:3 LAST-MODIFIED:20171125T103857Z SUMMARY:Ellen DURATION:PT30M DTSTART;TZID=Europe/Paris:20040528T100000 TRANSP:OPAQUE BEGIN:VALARM ATTACH:file: //localhost/Users/piou/Music/iTunes/iTunes%20Music/Depeche%20Mode/Singles% 2081-85/Its%20Called%20A%20Heart.mp3 ACTION:PROCEDURE TRIGGER;VALUE=DURATION:-PT2M X-KDE-KCALCORE-ENABLED:TRUE X-WR-ALARMID:PROCALARM END:VALARM END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:763394BC-873F-11D8-92F9-0003939BE42C SEQUENCE:6 LAST-MODIFIED:20171125T103857Z SUMMARY:Rosetta :-) DURATION:PT1H30M DTSTART;TZID=Europe/Paris:20040226T220000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20171125T103857Z CREATED:20171125T103857Z UID:763380B5-873F-11D8-92F9-0003939BE42C SEQUENCE:6 LAST-MODIFIED:20171125T103857Z DESCRIPTION:Thalys #09333\n2eme classe non fumeur couloir SUMMARY:Train LOCATION:Gare du Nord STATUS:CONFIRMED DURATION:PT3H32M DTSTART;TZID=Europe/Paris:20040105T125500 TRANSP:OPAQUE END:VEVENT END:VCALENDAR diff --git a/autotests/data/Compat/Evolution_2.8.2_timezone_test.ics.ical.ref b/autotests/data/Compat/Evolution_2.8.2_timezone_test.ics.ical.ref index 0d238f5d4..3d9a235d2 100644 --- a/autotests/data/Compat/Evolution_2.8.2_timezone_test.ics.ical.ref +++ b/autotests/data/Compat/Evolution_2.8.2_timezone_test.ics.ical.ref @@ -1,97 +1,97 @@ BEGIN:VCALENDAR PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN VERSION:2.0 X-KDE-ICAL-IMPLEMENTATION-VERSION:1.0 X-LibKCal-Testsuite-OutTZ:Europe/London BEGIN:VTIMEZONE TZID:GM BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0000 TZOFFSETTO:+0100 DTSTART:19781231T230000 RDATE;VALUE=DATE-TIME:19781231T230000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19790401T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:GM BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0000 TZOFFSETTO:+0100 DTSTART:19781231T230000 RDATE;VALUE=DATE-TIME:19781231T230000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19790401T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20070127T201124Z CREATED:20070127T201013Z UID:20070127T211005Z-13428-100-1-0@emsig SEQUENCE:2 LAST-MODIFIED:20070127T201124Z SUMMARY:Nominal is 1200 to 1230 _GMT_ on 27 Jan 2007 DTSTART;TZID=GM:20070127T120000 DTEND;TZID=GM:20070127T123000 TRANSP:OPAQUE END:VEVENT END:VCALENDAR diff --git a/autotests/data/Compat/Mozilla_1.0.ics.ical.ref b/autotests/data/Compat/Mozilla_1.0.ics.ical.ref index 086abb63b..a194a266f 100644 --- a/autotests/data/Compat/Mozilla_1.0.ics.ical.ref +++ b/autotests/data/Compat/Mozilla_1.0.ics.ical.ref @@ -1,229 +1,229 @@ BEGIN:VCALENDAR PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN VERSION:2.0 X-KDE-ICAL-IMPLEMENTATION-VERSION:1.0 BEGIN:VTIMEZONE TZID:GM BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0000 TZOFFSETTO:+0100 DTSTART:19781231T230000 RDATE;VALUE=DATE-TIME:19781231T230000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19790401T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:GM BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0000 TZOFFSETTO:+0100 DTSTART:19781231T230000 RDATE;VALUE=DATE-TIME:19781231T230000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19790401T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:GM BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0000 TZOFFSETTO:+0100 DTSTART:19781231T230000 RDATE;VALUE=DATE-TIME:19781231T230000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19790401T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:GM BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0000 TZOFFSETTO:+0100 DTSTART:19781231T230000 RDATE;VALUE=DATE-TIME:19781231T230000 END:STANDARD BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19790401T020000 RDATE;VALUE=DATE-TIME:19790401T020000 RDATE;VALUE=DATE-TIME:19800406T020000 END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19971026T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19790930T030000 -RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9 +RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9 RDATE;VALUE=DATE-TIME:19950924T030000 END:STANDARD END:VTIMEZONE BEGIN:VTODO DTSTAMP:20170914T153638Z CREATED:20170914T153638Z UID:26110226-9e9e-11d8-90c9-e6c8f9becdf7 LAST-MODIFIED:20170914T153638Z SUMMARY:Call Beacon to transfer funds STATUS:NEEDS-ACTION CLASS:PRIVATE DUE;TZID=GM:20040505T111500 DTSTART;TZID=GM:20040505T101500 PERCENT-COMPLETE:0 END:VTODO BEGIN:VEVENT DTSTAMP:20040503T202715Z CREATED:20170914T153638Z UID:918141053 LAST-MODIFIED:20040503T202715Z SUMMARY:Performance with Anne LOCATION:Raleigh STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=UTC:20040523T170000 DTEND;TZID=UTC:20040523T200000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20170914T153638Z X-MOZILLA-ALARM-DEFAULT-LENGTH:0 CREATED:20170914T153638Z UID:896c9eb4-1dd2-11b2-b487-b1bef43989c3 LAST-MODIFIED:20170914T153638Z DESCRIPTION:15-501 E Durham\, lt Easttowne Dr\, 3rd left Providence\, 3rd drive rt\, up on ste 200 SUMMARY:Dental Exam STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=GM:20040510T090000 DTEND;TZID=GM:20040510T110000 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20170914T153638Z CREATED:20170914T153638Z UID:9387e0e8-9ea1-11d8-86ed-b77ddbb7d081 LAST-MODIFIED:20170914T153638Z SUMMARY:Yemassee Graduation STATUS:CONFIRMED CLASS:PRIVATE DURATION:PT0S DTSTART;VALUE=DATE:20040528 TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT DTSTAMP:20040504T211728Z CREATED:20170914T153638Z UID:06ef0474-1dd2-11b2-853d-cc63771f70dd LAST-MODIFIED:20040504T211728Z SUMMARY:Convivium at 2707 Anderson Dr\, Raleigh\, 27608 STATUS:CONFIRMED CLASS:PRIVATE DTSTART;TZID=UTC:20040516T200000 DTEND;TZID=UTC:20040516T220000 TRANSP:OPAQUE END:VEVENT END:VCALENDAR diff --git a/autotests/testicaltimezones.cpp b/autotests/testicaltimezones.cpp index af3a9755b..71913cb83 100644 --- a/autotests/testicaltimezones.cpp +++ b/autotests/testicaltimezones.cpp @@ -1,232 +1,232 @@ /* This file is part of the kcalcore library. Copyright (c) 2005-2007 David Jarvie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "testicaltimezones.h" #include "icaltimezones_p.h" #include #include QTEST_MAIN(ICalTimeZonesTest) extern "C" { #include } using namespace KCalendarCore; static icalcomponent *loadCALENDAR(const char *vcal); // First daylight savings time has an end date, takes a break for a year, // and is then replaced by another static const char *VTZ_Western = "BEGIN:VTIMEZONE\r\n" "TZID:Test-Dummy-Western\r\n" "LAST-MODIFIED:19870101T000000Z\r\n" "TZURL:http://tz.reference.net/dummies/western\r\n" "LOCATION:Zedland/Tryburgh\r\n" "X-LIC-LOCATION:Wyland/Tryburgh\r\n" "BEGIN:STANDARD\r\n" "DTSTART:19671029T020000\r\n" "RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10\r\n" "TZOFFSETFROM:-0400\r\n" "TZOFFSETTO:-0500\r\n" "TZNAME:WST\r\n" "END:STANDARD\r\n" "BEGIN:DAYLIGHT\r\n" "DTSTART:19870405T020000\r\n" "RRULE:FREQ=YEARLY;UNTIL=19970406T070000Z;BYDAY=1SU;BYMONTH=4\r\n" "TZOFFSETFROM:-0500\r\n" "TZOFFSETTO:-0400\r\n" "TZNAME:WDT1\r\n" "END:DAYLIGHT\r\n" "BEGIN:DAYLIGHT\r\n" "DTSTART:19990425T020000\r\n" "RDATE;VALUE=DATE-TIME:20000430T020000\r\n" "TZOFFSETFROM:-0500\r\n" "TZOFFSETTO:-0400\r\n" "TZNAME:WDT2\r\n" "END:DAYLIGHT\r\n" "END:VTIMEZONE\r\n"; // Standard time only static const char *VTZ_other = "BEGIN:VTIMEZONE\r\n" "TZID:Test-Dummy-Other\r\n" "TZURL:http://tz.reference.net/dummies/other\r\n" "X-LIC-LOCATION:Wyland/Tryburgh\r\n" "BEGIN:STANDARD\r\n" "DTSTART:19500101T000000\r\n" "RDATE;VALUE=DATE-TIME:19500101T000000\r\n" "TZOFFSETFROM:+0000\r\n" "TZOFFSETTO:+0300\r\n" "TZNAME:OST\r\n" "END:STANDARD\r\n" "END:VTIMEZONE\r\n"; static const char *VTZ_other_DST = "BEGIN:VTIMEZONE\r\n" "TZID:Test-Dummy-Other-DST\r\n" "BEGIN:STANDARD\r\n" "DTSTART:19500101T000000\r\n" "RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11\r\n" "TZOFFSETFROM:+0000\r\n" "TZOFFSETTO:+0300\r\n" "TZNAME:OST\r\n" "END:STANDARD\r\n" "BEGIN:DAYLIGHT\r\n" "DTSTART:19500501T000000\r\n" "RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=5\r\n" "TZOFFSETFROM:+0200\r\n" "TZOFFSETTO:+0500\r\n" "TZNAME:DST\r\n" "END:DAYLIGHT\r\n" "END:VTIMEZONE\r\n"; static const char *VTZ_Prague = "BEGIN:VTIMEZONE\r\n" "TZID:Europe/Prague\r\n" "BEGIN:DAYLIGHT\r\n" "TZNAME:CEST\r\n" "TZOFFSETFROM:+0000\r\n" "TZOFFSETTO:+0200\r\n" "DTSTART:19790401T010000\r\n" "RDATE;VALUE=DATE-TIME:19790401T010000\r\n" "END:DAYLIGHT\r\n" "BEGIN:STANDARD\r\n" "TZNAME:CET\r\n" "TZOFFSETFROM:+0200\r\n" "TZOFFSETTO:+0100\r\n" "DTSTART:19971026T030000\r\n" "RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10\r\n" "END:STANDARD\r\n" "BEGIN:STANDARD\r\n" "TZNAME:CET\r\n" "TZOFFSETFROM:+0200\r\n" "TZOFFSETTO:+0100\r\n" "DTSTART:19790930T030000\r\n" - "RRULE:FREQ=YEARLY;UNTIL=19961027T030000;COUNT=17;BYDAY=-1SU;BYMONTH=9\r\n" + "RRULE:FREQ=YEARLY;UNTIL=19961027T030000;BYDAY=-1SU;BYMONTH=9\r\n" "RDATE;VALUE=DATE-TIME:19950924T030000\r\n" "END:STANDARD\r\n" "BEGIN:DAYLIGHT\r\n" "TZNAME:CEST\r\n" "TZOFFSETFROM:+0100\r\n" "TZOFFSETTO:+0200\r\n" "DTSTART:19810329T020000\r\n" "RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3\r\n" "END:DAYLIGHT\r\n" "BEGIN:DAYLIGHT\r\n" "TZNAME:CEST\r\n" "TZOFFSETFROM:+0100\r\n" "TZOFFSETTO:+0200\r\n" "DTSTART:19800406T020000\r\n" "RDATE;VALUE=DATE-TIME:19800406T020000\r\n" "END:DAYLIGHT\r\n" "END:VTIMEZONE\r\n"; // CALENDAR component header and footer static const char *calendarHeader = "BEGIN:VCALENDAR\r\n" "PRODID:-//Libkcal//NONSGML ICalTimeZonesTest//EN\r\n" "VERSION:2.0\r\n"; static const char *calendarFooter = "END:CALENDAR\r\n"; /////////////////////////// // ICalTimeZoneSource tests /////////////////////////// void ICalTimeZonesTest::initTestCase() { qputenv("TZ", "Europe/Zurich"); } void ICalTimeZonesTest::parse_data() { QTest::addColumn("vtimezone"); QTest::addColumn("onDate"); QTest::addColumn("origTz"); QTest::addColumn("expTz"); QTest::newRow("dummy-western") << QByteArray(VTZ_Western) << QDateTime{} << QByteArray("Test-Dummy-Western") << QByteArray("America/Toronto"); QTest::newRow("dummy-other") << QByteArray(VTZ_other) << QDateTime{} << QByteArray("Test-Dummy-Other") << QByteArray("UTC+03:00"); QTest::newRow("dummy-other-dst DST") << QByteArray(VTZ_other_DST) << QDateTime({ 2017, 03, 10 }, {}) << QByteArray("Test-Dummy-Other-DST") << QByteArray("UTC+03:00"); QTest::newRow("dummy-other-dst STD") << QByteArray(VTZ_other_DST) << QDateTime({ 2017, 07, 05 }, {}) << QByteArray("Test-Dummy-Other-DST") << QByteArray("UTC+05:00"); QTest::newRow("dummy-other-dst DST after") << QByteArray(VTZ_other_DST) << QDateTime({ 2017, 12, 24 }, {}) << QByteArray("Test-Dummy-Other-DST") << QByteArray("UTC+03:00"); QTest::newRow("iana") << QByteArray() << QDateTime({ 2017, 9, 14 }, {}) << QByteArray("Europe/Zurich") << QByteArray("Europe/Zurich"); } void ICalTimeZonesTest::parse() { QFETCH(QByteArray, vtimezone); QFETCH(QDateTime, onDate); QFETCH(QByteArray, origTz); QFETCH(QByteArray, expTz); QByteArray calText(calendarHeader); calText += vtimezone; calText += calendarFooter; auto vcalendar = loadCALENDAR(calText.constData()); ICalTimeZoneCache timezones; ICalTimeZoneParser parser(&timezones); parser.parse(vcalendar); icalcomponent_free(vcalendar); QCOMPARE(timezones.tzForTime(onDate, origTz).id(), expTz); } void ICalTimeZonesTest::write() { auto vtimezone = ICalTimeZoneParser::vcaltimezoneFromQTimeZone(QTimeZone("Europe/Prague"), QDateTime({1970, 1, 1}, {0, 0})); #if defined(USE_ICAL_3) QCOMPARE(vtimezone, QByteArray(VTZ_Prague).replace(";VALUE=DATE-TIME", "")); //krazy:exclude=doublequote_chars #else QCOMPARE(vtimezone, QByteArray(VTZ_Prague)); #endif } icalcomponent *loadCALENDAR(const char *vcal) { icalcomponent *calendar = icalcomponent_new_from_string(const_cast(vcal)); if (calendar) { if (icalcomponent_isa(calendar) == ICAL_VCALENDAR_COMPONENT) { return calendar; } icalcomponent_free(calendar); } return nullptr; } diff --git a/src/icaltimezones.cpp b/src/icaltimezones.cpp index c6d88918d..9c0500f7a 100644 --- a/src/icaltimezones.cpp +++ b/src/icaltimezones.cpp @@ -1,734 +1,733 @@ /* This file is part of the kcalcore library. Copyright (c) 2005-2007 David Jarvie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "icaltimezones_p.h" #include "icalformat.h" #include "icalformat_p.h" #include "recurrence.h" #include "recurrencerule.h" #include "recurrencehelper_p.h" #include "kcalendarcore_debug.h" #include #include extern "C" { #include #include } using namespace KCalendarCore; // Minimum repetition counts for VTIMEZONE RRULEs static const int minRuleCount = 5; // for any RRULE static const int minPhaseCount = 8; // for separate STANDARD/DAYLIGHT component // Convert an ical time to QDateTime, preserving the UTC indicator static QDateTime toQDateTime(const icaltimetype &t) { return QDateTime(QDate(t.year, t.month, t.day), QTime(t.hour, t.minute, t.second), #if defined(USE_ICAL_3) (icaltime_is_utc(t) ? Qt::UTC : Qt::LocalTime)); #else (t.is_utc ? Qt::UTC : Qt::LocalTime)); #endif } // Maximum date for time zone data. // It's not sensible to try to predict them very far in advance, because // they can easily change. Plus, it limits the processing required. static QDateTime MAX_DATE() { static QDateTime dt; if (!dt.isValid()) { dt = QDateTime(QDate::currentDate().addYears(20), QTime(0, 0, 0)); } return dt; } static icaltimetype writeLocalICalDateTime(const QDateTime &utc, int offset) { const QDateTime local = utc.addSecs(offset); icaltimetype t = icaltime_null_time(); t.year = local.date().year(); t.month = local.date().month(); t.day = local.date().day(); t.hour = local.time().hour(); t.minute = local.time().minute(); t.second = local.time().second(); t.is_date = 0; t.zone = nullptr; #if !defined(USE_ICAL_3) t.is_utc = 0; #endif return t; } namespace KCalendarCore { void ICalTimeZonePhase::dump() { qDebug() << " ~~~ ICalTimeZonePhase ~~~"; qDebug() << " Abbreviations:" << abbrevs; qDebug() << " UTC offset:" << utcOffset; qDebug() << " Transitions:" << transitions; qDebug() << " ~~~~~~~~~~~~~~~~~~~~~~~~~"; } void ICalTimeZone::dump() { qDebug() << "~~~ ICalTimeZone ~~~"; qDebug() << "ID:" << id; qDebug() << "QZONE:" << qZone.id(); qDebug() << "STD:"; standard.dump(); qDebug() << "DST:"; daylight.dump(); qDebug() << "~~~~~~~~~~~~~~~~~~~~"; } ICalTimeZoneCache::ICalTimeZoneCache() { } void ICalTimeZoneCache::insert(const QByteArray &id, const ICalTimeZone &tz) { mCache.insert(id, tz); } namespace { template typename T::const_iterator greatestSmallerThan(const T &c, const typename T::value_type &v) { auto it = std::lower_bound(c.cbegin(), c.cend(), v); if (it != c.cbegin()) { return --it; } return c.cend(); } } QTimeZone ICalTimeZoneCache::tzForTime(const QDateTime &dt, const QByteArray &tzid) const { if (QTimeZone::isTimeZoneIdAvailable(tzid)) { return QTimeZone(tzid); } const ICalTimeZone tz = mCache.value(tzid); if (!tz.qZone.isValid()) { return QTimeZone::systemTimeZone(); } // If the matched timezone is one of the UTC offset timezones, we need to make // sure it's in the correct DTS. // The lookup in ICalTimeZoneParser will only find TZ in standard time, but // if the datetim in question fits in the DTS zone, we need to use another UTC // offset timezone if (tz.qZone.id().startsWith("UTC")) { //krazy:exclude=strings // Find the nearest standard and DST transitions that occur BEFORE the "dt" const auto stdPrev = greatestSmallerThan(tz.standard.transitions, dt); const auto dstPrev = greatestSmallerThan(tz.daylight.transitions, dt); if (stdPrev != tz.standard.transitions.cend() && dstPrev != tz.daylight.transitions.cend()) { if (*dstPrev > *stdPrev) { // Previous DTS is closer to "dt" than previous standard, which // means we are in DTS right now const auto tzids = QTimeZone::availableTimeZoneIds(tz.daylight.utcOffset); auto dtsTzId = std::find_if(tzids.cbegin(), tzids.cend(), [](const QByteArray &id) { return id.startsWith("UTC"); //krazy:exclude=strings }); if (dtsTzId != tzids.cend()) { return QTimeZone(*dtsTzId); } } } } return tz.qZone; } ICalTimeZoneParser::ICalTimeZoneParser(ICalTimeZoneCache *cache) : mCache(cache) { } void ICalTimeZoneParser::updateTzEarliestDate(const IncidenceBase::Ptr &incidence, TimeZoneEarliestDate *earliest) { for (auto role : { IncidenceBase::RoleStartTimeZone, IncidenceBase::RoleEndTimeZone }) { const auto dt = incidence->dateTime(role); if (dt.isValid()) { if (dt.timeZone() == QTimeZone::utc()) { continue; } const auto prev = earliest->value(incidence->dtStart().timeZone()); if (!prev.isValid() || incidence->dtStart() < prev) { earliest->insert(incidence->dtStart().timeZone(), prev); } } } } icalcomponent *ICalTimeZoneParser::icalcomponentFromQTimeZone(const QTimeZone &tz, const QDateTime &earliest) { // VTIMEZONE RRULE types enum { DAY_OF_MONTH = 0x01, WEEKDAY_OF_MONTH = 0x02, LAST_WEEKDAY_OF_MONTH = 0x04 }; // Write the time zone data into an iCal component icalcomponent *tzcomp = icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); icalcomponent_add_property(tzcomp, icalproperty_new_tzid(tz.id().constData())); // icalcomponent_add_property(tzcomp, icalproperty_new_location( tz.name().toUtf8() )); // Compile an ordered list of transitions so that we can know the phases // which occur before and after each transition. QTimeZone::OffsetDataList transits = tz.transitions(QDateTime(), MAX_DATE()); if (transits.isEmpty()) { // If there is no way to compile a complete list of transitions // transitions() can return an empty list // In that case try get one transition to write a valid VTIMEZONE entry. if (transits.isEmpty()) { qCDebug(KCALCORE_LOG) << "No transition information available VTIMEZONE will be invalid."; } } if (earliest.isValid()) { // Remove all transitions earlier than those we are interested in for (int i = 0, end = transits.count(); i < end; ++i) { if (transits.at(i).atUtc >= earliest) { if (i > 0) { transits.erase(transits.begin(), transits.begin() + i); } break; } } } int trcount = transits.count(); QVector transitionsDone(trcount, false); // Go through the list of transitions and create an iCal component for each // distinct combination of phase after and UTC offset before the transition. icaldatetimeperiodtype dtperiod; dtperiod.period = icalperiodtype_null_period(); for (;;) { int i = 0; for (; i < trcount && transitionsDone[i]; ++i) { ; } if (i >= trcount) { break; } // Found a phase combination which hasn't yet been processed const int preOffset = (i > 0) ? transits.at(i - 1).offsetFromUtc : 0; const auto &transit = transits.at(i); if (transit.offsetFromUtc == preOffset) { transitionsDone[i] = true; while (++i < trcount) { if (transitionsDone[i] || transits.at(i).offsetFromUtc != transit.offsetFromUtc || transits.at(i).daylightTimeOffset != transit.daylightTimeOffset || transits.at(i - 1).offsetFromUtc != preOffset) { continue; } transitionsDone[i] = true; } continue; } const bool isDst = transit.daylightTimeOffset > 0; icalcomponent *phaseComp = icalcomponent_new(isDst ? ICAL_XDAYLIGHT_COMPONENT : ICAL_XSTANDARD_COMPONENT); if (!transit.abbreviation.isEmpty()) { icalcomponent_add_property(phaseComp, icalproperty_new_tzname( static_cast(transit.abbreviation.toUtf8().constData()))); } icalcomponent_add_property(phaseComp, icalproperty_new_tzoffsetfrom(preOffset)); icalcomponent_add_property(phaseComp, icalproperty_new_tzoffsetto(transit.offsetFromUtc)); // Create a component to hold initial RRULE if any, plus all RDATEs icalcomponent *phaseComp1 = icalcomponent_new_clone(phaseComp); icalcomponent_add_property(phaseComp1, icalproperty_new_dtstart( writeLocalICalDateTime(transits.at(i).atUtc, preOffset))); bool useNewRRULE = false; // Compile the list of UTC transition dates/times, and check // if the list can be reduced to an RRULE instead of multiple RDATEs. QTime time; QDate date; int year = 0, month = 0, daysInMonth = 0, dayOfMonth = 0; // avoid compiler warnings int dayOfWeek = 0; // Monday = 1 int nthFromStart = 0; // nth (weekday) of month int nthFromEnd = 0; // nth last (weekday) of month int newRule; int rule = 0; QList rdates;// dates which (probably) need to be written as RDATEs QList times; QDateTime qdt = transits.at(i).atUtc; // set 'qdt' for start of loop times += qdt; transitionsDone[i] = true; do { if (!rule) { // Initialise data for detecting a new rule rule = DAY_OF_MONTH | WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH; time = qdt.time(); date = qdt.date(); year = date.year(); month = date.month(); daysInMonth = date.daysInMonth(); dayOfWeek = date.dayOfWeek(); // Monday = 1 dayOfMonth = date.day(); nthFromStart = (dayOfMonth - 1) / 7 + 1; // nth (weekday) of month nthFromEnd = (daysInMonth - dayOfMonth) / 7 + 1; // nth last (weekday) of month } if (++i >= trcount) { newRule = 0; times += QDateTime(); // append a dummy value since last value in list is ignored } else { if (transitionsDone[i] || transits.at(i).offsetFromUtc != transit.offsetFromUtc || transits.at(i).daylightTimeOffset != transit.daylightTimeOffset || transits.at(i - 1).offsetFromUtc != preOffset) { continue; } transitionsDone[i] = true; qdt = transits.at(i).atUtc; if (!qdt.isValid()) { continue; } newRule = rule; times += qdt; date = qdt.date(); if (qdt.time() != time || date.month() != month || date.year() != ++year) { newRule = 0; } else { const int day = date.day(); if ((newRule & DAY_OF_MONTH) && day != dayOfMonth) { newRule &= ~DAY_OF_MONTH; } if (newRule & (WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH)) { if (date.dayOfWeek() != dayOfWeek) { newRule &= ~(WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH); } else { if ((newRule & WEEKDAY_OF_MONTH) && (day - 1) / 7 + 1 != nthFromStart) { newRule &= ~WEEKDAY_OF_MONTH; } if ((newRule & LAST_WEEKDAY_OF_MONTH) && (daysInMonth - day) / 7 + 1 != nthFromEnd) { newRule &= ~LAST_WEEKDAY_OF_MONTH; } } } } } if (!newRule) { // The previous rule (if any) no longer applies. // Write all the times up to but not including the current one. // First check whether any of the last RDATE values fit this rule. int yr = times[0].date().year(); while (!rdates.isEmpty()) { qdt = rdates.last(); date = qdt.date(); if (qdt.time() != time || date.month() != month || date.year() != --yr) { break; } const int day = date.day(); if (rule & DAY_OF_MONTH) { if (day != dayOfMonth) { break; } } else { if (date.dayOfWeek() != dayOfWeek || ((rule & WEEKDAY_OF_MONTH) && (day - 1) / 7 + 1 != nthFromStart) || ((rule & LAST_WEEKDAY_OF_MONTH) && (daysInMonth - day) / 7 + 1 != nthFromEnd)) { break; } } times.prepend(qdt); rdates.pop_back(); } if (times.count() > (useNewRRULE ? minPhaseCount : minRuleCount)) { // There are enough dates to combine into an RRULE icalrecurrencetype r; icalrecurrencetype_clear(&r); r.freq = ICAL_YEARLY_RECURRENCE; - r.count = (year >= 2030) ? 0 : times.count() - 1; r.by_month[0] = month; if (rule & DAY_OF_MONTH) { r.by_month_day[0] = dayOfMonth; } else if (rule & WEEKDAY_OF_MONTH) { r.by_day[0] = (dayOfWeek % 7 + 1) + (nthFromStart * 8); // Sunday = 1 } else if (rule & LAST_WEEKDAY_OF_MONTH) { r.by_day[0] = -(dayOfWeek % 7 + 1) - (nthFromEnd * 8); // Sunday = 1 } r.until = writeLocalICalDateTime(times.takeAt(times.size() - 1), preOffset); icalproperty *prop = icalproperty_new_rrule(r); if (useNewRRULE) { // This RRULE doesn't start from the phase start date, so set it into // a new STANDARD/DAYLIGHT component in the VTIMEZONE. icalcomponent *c = icalcomponent_new_clone(phaseComp); icalcomponent_add_property( c, icalproperty_new_dtstart(writeLocalICalDateTime(times[0], preOffset))); icalcomponent_add_property(c, prop); icalcomponent_add_component(tzcomp, c); } else { icalcomponent_add_property(phaseComp1, prop); } } else { // Save dates for writing as RDATEs for (int t = 0, tend = times.count() - 1; t < tend; ++t) { rdates += times[t]; } } useNewRRULE = true; // All date/time values but the last have been added to the VTIMEZONE. // Remove them from the list. qdt = times.last(); // set 'qdt' for start of loop times.clear(); times += qdt; } rule = newRule; } while (i < trcount); // Write remaining dates as RDATEs for (int rd = 0, rdend = rdates.count(); rd < rdend; ++rd) { dtperiod.time = writeLocalICalDateTime(rdates[rd], preOffset); icalcomponent_add_property(phaseComp1, icalproperty_new_rdate(dtperiod)); } icalcomponent_add_component(tzcomp, phaseComp1); icalcomponent_free(phaseComp); } return tzcomp; } icaltimezone *ICalTimeZoneParser::icaltimezoneFromQTimeZone(const QTimeZone &tz, const QDateTime &earliest) { auto itz = icaltimezone_new(); icaltimezone_set_component(itz, icalcomponentFromQTimeZone(tz, earliest)); return itz; } void ICalTimeZoneParser::parse(icalcomponent *calendar) { for (auto *c = icalcomponent_get_first_component(calendar, ICAL_VTIMEZONE_COMPONENT); c; c = icalcomponent_get_next_component(calendar, ICAL_VTIMEZONE_COMPONENT)) { auto icalZone = parseTimeZone(c); //icalZone.dump(); if (!icalZone.id.isEmpty()) { if (!icalZone.qZone.isValid()) { icalZone.qZone = resolveICalTimeZone(icalZone); } if (!icalZone.qZone.isValid()) { qCWarning(KCALCORE_LOG) << "Failed to map" << icalZone.id << "to a known IANA timezone"; continue; } mCache->insert(icalZone.id, icalZone); } } } QTimeZone ICalTimeZoneParser::resolveICalTimeZone(const ICalTimeZone &icalZone) { const auto phase = icalZone.standard; const auto now = QDateTime::currentDateTimeUtc(); const auto candidates = QTimeZone::availableTimeZoneIds(phase.utcOffset); QMap matchedCandidates; for (const auto &tzid : candidates) { const QTimeZone candidate(tzid); // This would be a fallback, candidate has transitions, but the phase does not if (candidate.hasTransitions() == phase.transitions.isEmpty()) { matchedCandidates.insert(0, candidate); continue; } // Without transitions, we can't do any more precise matching, so just // accept this candidate and be done with it if (!candidate.hasTransitions() && phase.transitions.isEmpty()) { return candidate; } // Calculate how many transitions this candidate shares with the phase. // The candidate with the most matching transitions will win. auto begin = std::lower_bound(phase.transitions.cbegin(), phase.transitions.cend(), now.addYears(-20)); // If no transition older than 20 years is found, we will start from beginning if (begin == phase.transitions.cend()) { begin = phase.transitions.cbegin(); } auto end = std::upper_bound(begin, phase.transitions.cend(), now); int matchedTransitions = 0; for (auto it = begin; it != end; ++it) { const auto &transition = *it; const QTimeZone::OffsetDataList candidateTransitions = candidate.transitions(transition, transition); if (candidateTransitions.isEmpty()) { continue; } ++matchedTransitions; // 1 point for a matching transition const auto candidateTransition = candidateTransitions[0]; // FIXME: THIS IS HOW IT SHOULD BE: //const auto abvs = transition.abbreviations(); const auto abvs = phase.abbrevs; for (const auto &abv : abvs) { if (candidateTransition.abbreviation == QString::fromUtf8(abv)) { matchedTransitions += 1024; // lots of points for a transition with a matching abbreviation break; } } } matchedCandidates.insert(matchedTransitions, candidate); } if (!matchedCandidates.isEmpty()) { return matchedCandidates.value(matchedCandidates.lastKey()); } return {}; } ICalTimeZone ICalTimeZoneParser::parseTimeZone(icalcomponent *vtimezone) { ICalTimeZone icalTz; if (auto tzidProp = icalcomponent_get_first_property(vtimezone, ICAL_TZID_PROPERTY)) { icalTz.id = icalproperty_get_value_as_string(tzidProp); // If the VTIMEZONE is a known IANA time zone don't bother parsing the rest // of the VTIMEZONE, get QTimeZone directly from Qt if (QTimeZone::isTimeZoneIdAvailable(icalTz.id)) { icalTz.qZone = QTimeZone(icalTz.id); return icalTz; } else { // Not IANA, but maybe we can match it from Windows ID? const auto ianaTzid = QTimeZone::windowsIdToDefaultIanaId(icalTz.id); if (!ianaTzid.isEmpty()) { icalTz.qZone = QTimeZone(ianaTzid); return icalTz; } } } for (icalcomponent *c = icalcomponent_get_first_component(vtimezone, ICAL_ANY_COMPONENT); c; c = icalcomponent_get_next_component(vtimezone, ICAL_ANY_COMPONENT)) { icalcomponent_kind kind = icalcomponent_isa(c); switch (kind) { case ICAL_XSTANDARD_COMPONENT: //qCDebug(KCALCORE_LOG) << "---standard phase: found"; parsePhase(c, false, icalTz.standard); break; case ICAL_XDAYLIGHT_COMPONENT: //qCDebug(KCALCORE_LOG) << "---daylight phase: found"; parsePhase(c, true, icalTz.daylight); break; default: qCDebug(KCALCORE_LOG) << "Unknown component:" << int(kind); break; } } return icalTz; } bool ICalTimeZoneParser::parsePhase(icalcomponent *c, bool daylight, ICalTimeZonePhase &phase) { // Read the observance data for this standard/daylight savings phase int utcOffset = 0; int prevOffset = 0; bool recurs = false; bool found_dtstart = false; bool found_tzoffsetfrom = false; bool found_tzoffsetto = false; icaltimetype dtstart = icaltime_null_time(); QSet abbrevs; // Now do the ical reading. icalproperty *p = icalcomponent_get_first_property(c, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_TZNAME_PROPERTY: { // abbreviated name for this time offset // TZNAME can appear multiple times in order to provide language // translations of the time zone offset name. // TODO: Does this cope with multiple language specifications? QByteArray name = icalproperty_get_tzname(p); // Outlook (2000) places "Standard Time" and "Daylight Time" in the TZNAME // strings, which is totally useless. So ignore those. if ((!daylight && name == "Standard Time") || (daylight && name == "Daylight Time")) { break; } abbrevs.insert(name); break; } case ICAL_DTSTART_PROPERTY: // local time at which phase starts dtstart = icalproperty_get_dtstart(p); found_dtstart = true; break; case ICAL_TZOFFSETFROM_PROPERTY: // UTC offset immediately before start of phase prevOffset = icalproperty_get_tzoffsetfrom(p); found_tzoffsetfrom = true; break; case ICAL_TZOFFSETTO_PROPERTY: utcOffset = icalproperty_get_tzoffsetto(p); found_tzoffsetto = true; break; case ICAL_RDATE_PROPERTY: case ICAL_RRULE_PROPERTY: recurs = true; break; default: break; } p = icalcomponent_get_next_property(c, ICAL_ANY_PROPERTY); } // Validate the phase data if (!found_dtstart || !found_tzoffsetfrom || !found_tzoffsetto) { qCDebug(KCALCORE_LOG) << "DTSTART/TZOFFSETFROM/TZOFFSETTO missing"; return false; } // Convert DTSTART to QDateTime, and from local time to UTC const QDateTime localStart = toQDateTime(dtstart); // local time dtstart.second -= prevOffset; #if defined(USE_ICAL_3) dtstart = icaltime_convert_to_zone(dtstart, icaltimezone_get_utc_timezone()); #else dtstart.is_utc = 1; #endif const QDateTime utcStart = toQDateTime(icaltime_normalize(dtstart)); // UTC phase.abbrevs.unite(abbrevs); phase.utcOffset = utcOffset; phase.transitions += utcStart; if (recurs) { /* RDATE or RRULE is specified. There should only be one or the other, but * it doesn't really matter - the code can cope with both. * Note that we had to get DTSTART, TZOFFSETFROM, TZOFFSETTO before reading * recurrences. */ const QDateTime maxTime(MAX_DATE()); Recurrence recur; icalproperty *p = icalcomponent_get_first_property(c, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_RDATE_PROPERTY: { icaltimetype t = icalproperty_get_rdate(p).time; if (icaltime_is_date(t)) { // RDATE with a DATE value inherits the (local) time from DTSTART t.hour = dtstart.hour; t.minute = dtstart.minute; t.second = dtstart.second; #if !defined(USE_ICAL_3) t.is_utc = 0; // dtstart is in local time #endif t.is_date = 0; } // RFC2445 states that RDATE must be in local time, // but we support UTC as well to be safe. #if defined(USE_ICAL_3) if (!icaltime_is_utc(t)) { #else if (!t.is_utc) { #endif t.second -= prevOffset; // convert to UTC #if defined(USE_ICAL_3) t = icaltime_convert_to_zone(t, icaltimezone_get_utc_timezone()); #else t.is_utc = 1; #endif t = icaltime_normalize(t); } phase.transitions += toQDateTime(t); break; } case ICAL_RRULE_PROPERTY: { RecurrenceRule r; ICalFormat icf; ICalFormatImpl impl(&icf); impl.readRecurrence(icalproperty_get_rrule(p), &r); r.setStartDt(localStart); // The end date time specified in an RRULE should be in UTC. // Convert to local time to avoid timesInInterval() getting things wrong. if (r.duration() == 0) { QDateTime end(r.endDt()); if (end.timeSpec() == Qt::UTC) { end.setTimeSpec(Qt::LocalTime); r.setEndDt(end.addSecs(prevOffset)); } } const auto dts = r.timesInInterval(localStart, maxTime); for (int i = 0, end = dts.count(); i < end; ++i) { QDateTime utc = dts[i]; utc.setTimeSpec(Qt::UTC); phase.transitions += utc.addSecs(-prevOffset); } break; } default: break; } p = icalcomponent_get_next_property(c, ICAL_ANY_PROPERTY); } sortAndRemoveDuplicates(phase.transitions); } return true; } QByteArray ICalTimeZoneParser::vcaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest) { auto icalTz = icalcomponentFromQTimeZone(qtz, earliest); const QByteArray result(icalcomponent_as_ical_string(icalTz)); icalmemory_free_ring(); icalcomponent_free(icalTz); return result; } } // namespace KCalendarCore