2

我正在通过 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 解决这个问题吗?

4

1 回答 1

1

DTSTART 和 DTEND 中的“Z”后缀表示这些日期时间以 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://www.rfc-editor.org/rfc/rfc5545#section-3.8.7.2

于 2015-04-13T07:43:48.563 回答