Google calendar api 让谷歌日历遵守iCal时区有困难

Google calendar api 让谷歌日历遵守iCal时区有困难,google-calendar-api,icalendar,Google Calendar Api,Icalendar,我已经构建了一个iCal提要,它在苹果的日历中运行得非常好。然后我试着把它导入谷歌日历,时间都是五个小时,这是有道理的,因为我在美国/东部时区。根据ical规范,我假设日历程序应该将我的时间视为本地时间,基于它们的格式(它们没有时区或UTC标记),但事实并非如此。因此,我在日历中添加了时区信息 BEGIN:VCALENDAR CALSCALE:GREGORIAN METHOD:PUBLISH PRODID:iCalendar-Ruby VERSION:2.0 BEGIN:VTIMEZON

我已经构建了一个iCal提要,它在苹果的日历中运行得非常好。然后我试着把它导入谷歌日历,时间都是五个小时,这是有道理的,因为我在美国/东部时区。根据ical规范,我假设日历程序应该将我的时间视为本地时间,基于它们的格式(它们没有时区或UTC标记),但事实并非如此。因此,我在日历中添加了时区信息

BEGIN:VCALENDAR 
CALSCALE:GREGORIAN 
METHOD:PUBLISH 
PRODID:iCalendar-Ruby VERSION:2.0 
BEGIN:VTIMEZONE 
TZID:America/New_York 
BEGIN:DAYLIGHT 
DTSTART:19700308T020000 
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 
TZNAME:EDT 
TZOFFSETFROM:-0500 
TZOFFSETTO:-0400 
END:DAYLIGHT 
BEGIN:STANDARD 
DTSTART:19701101T020000 
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 
TZNAME:EST 
TZOFFSETFROM:-0400 
TZOFFSETTO:-0500 
END:STANDARD 
END:VTIMEZONE
我删除了一个重新导入的日历,时间仍然关闭。标准事件如下所示:

BEGIN:VEVENT 
DESCRIPTION:Justin M. is scheduled to work from 12 PM to 3 PM. 
DTEND:20111103T150000 
DTSTAMP:20111122T144545 
DTSTART:20111103T120000 
LOCATION:Museum of Unnatural History 
SEQUENCE:0 
SUMMARY:Justin M. 
UID:2011-11-22T14:45:45+00:00_239255930@0a9a698e-854d-48e2-97d4-37ff0b28311 9 
END:VEVENT

所以,我不知道谷歌日历为什么会有问题。是否只是缓存URL而不是真正更新日历?还有什么我应该做的吗。

因此,我求助于使用UTC时间,在每个事件时间的末尾添加一个
Z
。加上日历中的时区信息,谷歌正确地转换了时间——除了白天。那些还是关着的。如果我能找出原因,将更新。

您可以在每个事件日期中指定特定的时区,例如

DTSTART;TZID=America/New_York:20150218T133000

这样,在创建日历时,将自动考虑日光时间,而不必将本地时间转换为UTC(Z)格式。注意:如果解释ical文件的客户端没有正确的区域设置,您也可能会遇到时区问题。

Google calendar确实会将URL缓存一段时间-许多人一直抱怨手动刷新是一项必需的功能(多年来)。