Часовой пояс в приглашении на встречу icalendar или vcalendar

Я отправляю запрос на собрание календаря через PHP и следующий код, который я использую.

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20150501T080000Z
DTEND:20150502T090000Z
DTSTAMP:20150411T075116Z
ORGANIZER;CN=Jass:mailto:[email protected]
UID:12345678
ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP= TRUE;CN=Sample:mailto:[email protected]
DESCRIPTION:Complete event on http://www.sample.com/get_event.php?id=12345678
LOCATION: India
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:TESTING timezones
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

Проблема

Я отправляю запрос с 8:00 до 9:00, но в приглашении получаю с 13:30 до 14:30.

так как же в этом случае управлять часовым поясом?
Что такое DTSTAMP и можно ли решить эту проблему с помощью DTSTAMP?


person Jass    schedule 11.04.2015    source источник


Ответы (1)


Суффикс «Z» в ваших DTSTART и DTEND указывает, что эти даты и время предоставляются в формате UTC. Если предположить, что в вашем клиенте установлен часовой пояс Индии (UTC + 5:30), он правильно отображает время начала как 13:30.

Таким образом, вам нужно либо принять это во внимание при отправке приглашения, либо включить компонент VTIMEZONE в ваше приглашение и указать этот VTIMEZONE в вашем DTSTART/DTEND:

...
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Asia/Kolkata
BEGIN:STANDARD
TZOFFSETFROM:+0530
TZOFFSETTO:+0530
DTSTART:19451015T000000
TZNAME:IST
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=Asia/Kolkata:20150501T080000
DTEND;TZID=Asia/Kolkata:20150501T090000

...

DTSTAMP используется в основном для того, чтобы увидеть, является ли обновление существующего события более поздним, чем то, что клиент уже получил. См. https://tools.ietf.org/html/rfc5545#section-3.8. 7.2

person Arnaud Quillaud    schedule 13.04.2015