如何为重复发生的事件编写ICS文件?

时间:2016-09-12 17:06:41

标签: date time calendar icalendar

我想创建一个描述定期事件的ICS文件,该事件发生在2016年全年的每周一13:00到14:00 UTC.ICS文件应该可以由Google日历导入。我发现很难在网上找到并理解如何构建这样一个文件的细节。我目前所拥有的是一种创建包含单个事件列表的文件的方法,但我希望对该文件中定义的事件有一个规则。我现在有类似的内容:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//SERN//INDICO//EN
BEGIN:VEVENT
SUMMARY:Software Meeting
DTSTART;VALUE=DATE-TIME:20160818T150000Z
DTEND;VALUE=DATE-TIME:20160818T160000Z
DTSTAMP;VALUE=DATE-TIME:20160912T165700Z
UID:indico-event-563636@sern.ch
DESCRIPTION:https://indico.sern.ch/event/999999/
LOCATION:42-3-002 (SERN)
URL:https://indico.sern.ch/event/999999/
END:VEVENT
BEGIN:VEVENT
SUMMARY:Software Meeting
DTSTART;VALUE=DATE-TIME:20160825T150000Z
DTEND;VALUE=DATE-TIME:20160825T160000Z
DTSTAMP;VALUE=DATE-TIME:20160912T165700Z
UID:indico-event-565483@sern.ch
DESCRIPTION:https://indico.sern.ch/event/999999/
LOCATION:42-3-002 (SERN)
URL:https://indico.sern.ch/event/999999/
END:VEVENT
END:VCALENDAR

编辑:在the solution提供的zcontent之后,我写了以下似乎成功运作的ICS文件:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//SERN//INDICO//EN
BEGIN:VEVENT
SUMMARY:Software Meeting
TZID:Europe/Zurich
DTSTART:20150202T170000
DTEND:20150202T180000
DTSTAMP:20150202T170000
RRULE:FREQ=WEEKLY;UNTIL=20380119T000000
UID:indico-event-565483@sern.ch
DESCRIPTION:https://indico.sern.ch/event/999999/
LOCATION:42-3-002 (SERN)
URL:https://indico.sern.ch/event/999999/
END:VEVENT
END:VCALENDAR

1 个答案:

答案 0 :(得分:5)

您需要为活动添加RRULE属性。对于2016年的重复周一活动,您需要在活动中使用以下行:

DTSTART:20160104T130000Z

DTEND:20160104T140000Z

RRULE:FREQ = WEEKLY; UNTIL = 20170101T000000Z

您可以在此处找到有关RRULE语法的详细信息: http://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html

您还可能会发现在测试期间验证您的icalendar Feed非常有用,以确保Google日历不会出现问题。这是一个有用的验证工具: http://icalendar.org/validator.html

免责声明:我认为icalendar验证工具是互联网上最好的,但我也写过: - )