Google calendar api 谷歌日历将小时添加到vCal事件,尽管设置了BST并使用本地时间格式

Google calendar api 谷歌日历将小时添加到vCal事件,尽管设置了BST并使用本地时间格式,google-calendar-api,icalendar,vcalendar,Google Calendar Api,Icalendar,Vcalendar,我正在生成一个动态vCalendar文件,以便员工可以通过他们最喜欢的日历应用程序(主要是Apple iCal或Google Calendar)进行订阅。苹果iCal运行良好,但无论我做什么,我似乎都无法让谷歌日历显示正确的时间。它似乎将时间视为UTC/GMT,并自动添加一个小时,即使我没有在DTSTART/DTEND日期上使用“Z”后缀来表示它已经是本地时间 我从一个简单的格式开始,它不需要描述夏令时,因为日期已经是本地的: BEGIN:VCALENDAR PRODID:-//My Calen

我正在生成一个动态vCalendar文件,以便员工可以通过他们最喜欢的日历应用程序(主要是Apple iCal或Google Calendar)进行订阅。苹果iCal运行良好,但无论我做什么,我似乎都无法让谷歌日历显示正确的时间。它似乎将时间视为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 Calendar仍然坚持在每个活动中增加一个小时。

好的,事实证明上述方法有效。问题在于谷歌日历缓存。如果取消订阅并重新添加URL,它仍然使用缓存版本。在URL的末尾放置一个虚拟查询迫使Google刷新,嘿,presto,它现在正确地显示了时间