Совместимость внешнего вида DDay.iCal с часовыми поясами и шаблонами повторения
Мне повезло, что я смог принять мои файлы.ics по электронной почте и интерпретировать их как приглашения календаря, но у меня проблемы с часовыми поясами.
Первоначально я обнаружил, что, если все мои даты указаны в UTC, Outlook делает правильные вещи (правильная вещь - преобразование времени в настройку часового пояса моей системы при отображении события). Вот файл iCalendar:
BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST
PRODID:-//ddaysoftware.com//NONSGML DDay.iCal 1.0//EN
BEGIN:VEVENT
ATTENDEE;CN=MIke;ROLE=REQ-PARTICIPANT;PARTSTAT=TENTATIVE;CUTYPE=IND
IVIDUAL;RSVP=TRUE:MAILTO:mike@host.com
DESCRIPTION:df
DTEND:20120924T230000Z
DTSTAMP:20120924T221102Z
DTSTART:20120924T223000Z
LAST-MODIFIED:20120924T221102Z
ORGANIZER;CN=Buddy Boy:MAILTO:buddyboy@host.com
SEQUENCE:0
SUMMARY:dasdfasdf
UID:cfa64be5-e731-4209-bef9-bf178432ae57
END:VEVENT
END:VCALENDAR
К сожалению, когда я добавляю повторяющееся событие, Outlook по какой-то причине не будет этого делать. Итак, я попытался добавить часовой пояс в мой файл iCalendar, используя:
_calendar.AddTimeZone(myTimeZone);
Странно то, что вложение отображается как "не поддерживаемый календарь event.ics", однако когда я открываю вложение, Outlook интерпретирует файл очень хорошо (по большей части).
Вот файл iCalendar:
BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST
PRODID:-//ddaysoftware.com//NONSGML DDay.iCal 1.0//EN
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
DTSTART;VALUE=DATE:18000101
RRULE:FREQ=YEARLY;BYDAY=SU;BYHOUR=2;BYMINUTE=0;BYMONTH=10;BYMONTHDAY=25,26,
27,28,29,30,31
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART;VALUE=DATE:18000101
RRULE:FREQ=YEARLY;BYDAY=SU;BYHOUR=2;BYMINUTE=0;BYMONTH=4;BYMONTHDAY=1,2,3,4
,5,6,7
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
DTSTART;VALUE=DATE:20070101
RRULE:FREQ=YEARLY;BYDAY=SU;BYHOUR=2;BYMINUTE=0;BYMONTH=11;BYMONTHDAY=1,2,3,
4,5,6,7
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART;VALUE=DATE:20070101
RRULE:FREQ=YEARLY;BYDAY=SU;BYHOUR=2;BYMINUTE=0;BYMONTH=3;BYMONTHDAY=8,9,10,
11,12,13,14
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ATTENDEE;CN=MIke;ROLE=REQ-PARTICIPANT;PARTSTAT=TENTATIVE;CUTYPE=IND
IVIDUAL;RSVP=TRUE:MAILTO:mike@host.com
DESCRIPTION:sadf
DTEND:20120924T190000
DTSTAMP:20120924T221645Z
DTSTART:20120924T183000
LAST-MODIFIED:20120924T221645Z
ORGANIZER;CN=Buddy Boy:MAILTO:buddyboy@host.com
SEQUENCE:0
SUMMARY:sdfadsfadsf
UID:61a57e06-7b6c-41fa-a640-1b217715e905
END:VEVENT
END:VCALENDAR
Кто-нибудь знает, с какой частью этого внешнего вида файла возникла проблема? Или, что еще важнее, кто-нибудь знает, что я могу сделать в dday.iCal, чтобы сделать мир счастливым?
Спасибо!
1 ответ
Во-первых, вы должны использовать идентификатор TZID, чтобы каландры знали, какой часовой пояс это событие, а не календарь
http://tools.ietf.org/html/rfc5545
что приведет к изменению вашего DTSTART
от:
DTSTART:20120924T183000
чтобы:
DTSTART;TZID=Eastern Standard Time:19980119T020000
Затем вы должны также изменить определение часового пояса (и особенно RRULE, DTSTART) с:
DTSTART;VALUE=DATE:18000101
RULE:FREQ=YEARLY;BYDAY=SU;BYHOUR=2;BYMINUTE=0;BYMONTH=10;BYMONTHDAY=25,26,27,28,29,30,31
чтобы:
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
LAST-MODIFIED:19870101T000000Z
BEGIN:STANDARD
DTSTART:19671029T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19870405T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
`