icalendar或vcalendar会议邀请中的时区

时间:2015-04-11 06:44:42

标签: php icalendar vcalendar

我正在通过PHP和以下代码发送日历会议请求,我正在使用。

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20150501T080000Z
DTEND:20150502T090000Z
DTSTAMP:20150411T075116Z
ORGANIZER;CN=Jass:mailto:organizer@google.com
UID:12345678
ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP= TRUE;CN=Sample:mailto:sample@test.com
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点到早上9点,但是在邀请函中,我将在下午1:30到2:30之间收到请求。

那么在这种情况下如何管理时区? 什么是DTSTAMP?我们可以通过DTSTAMP管理这个问题吗?

1 个答案:

答案 0 :(得分:1)

" Z" DTSTART和DTEND中的后缀表示这些日期时间以UTC格式提供。假设您的客户端的时区设置为印度(UTC + 5h30),它会正确显示开始时间为下午1:30。

因此,您需要在发送邀请时考虑到这一点,或者在邀请中包含VTIMEZONE组件并在DTSTART / DTEND中引用VTIMEZONE:

...
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