我正在生成一个动态 vCalendar 文件,以便员工可以通过他们最喜欢的日历应用程序(主要是 Apple iCal 或 Google 日历)进行订阅。Apple iCal 工作正常,但无论我做什么,我似乎都无法让 Google 日历显示正确的时间。它似乎将时间视为 UTC/GMT 并自动添加一个小时,即使我没有在 DTSTART/DTEND 日期上使用“Z”后缀来显示它已经是本地时间。
我从一个简单的格式开始,它不需要描述自本地日期以来的夏令时:
BEGIN:VCALENDAR
PRODID:-//My Calendar//Pix//EN
VERSION:2.0
METHOD:PUBLISH
X-WR-TIMEZONE:Europe/London
BEGIN:VEVENT
DTSTART:20150730T193000
DTEND:20150730T211500
DTSTAMP:20150704T113005
UID:8252@mycalendar
CLASS:PUBLIC
CREATED:20150701T100000
DESCRIPTION:Cabaret
LAST-MODIFIED:20150704T072253
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:The Supreme Fabulettes
LOCATION: White Rose Rotunda
END:VEVENT
END:VCALENDAR
这在 iCal 中可以正常工作,但在 Google 日历中却不行,所以我在上面的 X-WR-TIMEZONE 声明之后添加了 VTIMEZONE 内容:
BEGIN:VTIMEZONE
TZID:Europe/London
X-LIC-LOCATION:Europe/London
BEGIN:DAYLIGHT
DTSTART:19700330T010000
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:BST
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19701026T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:STANDARD
END:STANDARD
END:VTIMEZONE
这在 iCal 中仍然有效,但 Google 日历仍然坚持为每个事件增加一个小时。