Google日历处理相同的ics文件与导入和网络流不同

时间:2013-01-24 21:30:27

标签: google-calendar-api icalendar webcal

我创建了一个网络流,Google日历会成功读取,然后创建活动。但是,它创建的事件比它们应该提前5小时。例如,下面的事件发生在下午1点。

如果我使用相同的网络流并将其另存为.ics文件,然后将该文件导入Google日历,则所有时间都是正确的。

为什么Google日历会以不同方式处理这些问题?在Mac日历应用程序中,无论是通过网络流添加还是通过导入.ics文件,事件都会在正确的时间出现。

Google日历和Mac日历都知道我在EST(通过日历设置 - 在ICS文件中没有声明,正如您所看到的那样)。

我希望Google正确处理网络流,以便在我添加更多活动时自动更新。

此处列出了ICS文件的开头和单个事件。它出现在Mac日历中的下午6点,以及Google日历中的下午1点。

BEGIN:VCALENDAR
CALSCALE:GREGORIAN
METHOD:PUBLISH
PRODID:iCalendar-Ruby
VERSION:2.0
BEGIN:VEVENT
DESCRIPTION: football game on Sunday at 6pm, on NBC, with dinner
DTEND:20121208T233000Z
DTSTAMP:20130124T200858
DTSTART:20121208T230000Z
CLASS:PUBLIC
SEQUENCE:0
SUMMARY:sunday 6pm football game
UID:2013-01-24T20:08:58+00:00_945022440@e8deb599-a4b6-40a3-b82c-d1baf5e9109e
END:VEVENT
END:VCALENDAR

1 个答案:

答案 0 :(得分:1)

这是因为Google日历不会执行浮动时区,因此如果没有指定时区,则假定为UTC。当您导入没有在ics文件中指定的特定时区的内容时,Mac日历会假定您的时区。因此,您必须在文件中添加时区信息。

How Google Calendar works with time zones

Writing ICS files for multiple clients, including Google

在文件中添加VTIMEZONE部分应该有所帮助:

BEGIN:VTIMEZONE
TZID:Eastern
BEGIN:STANDARD
DTSTART:16011104T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010311T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
END:VTIMEZONE