icalendar 或 vcalendar 会议邀请中的时区

Time zone in icalendar or vcalendar meeting invitation

我正在通过 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:30pm 到 2:30pm。

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

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

所以您要么在发送邀请时考虑到这一点,要么在您的邀请中包含一个 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://www.rfc-editor.org/rfc/rfc5545#section-3.8.7.2