iCalendar中的RECURRENCE-ID(RFC 5545)

时间:2012-07-12 16:31:03

标签: icalendar recurrence rfc2445 rrule rfc5545

我对iCalendar规范RFC 5545中的Property RECURRENCE-ID和此属性中的RANGE参数感到有点困惑。

假设一个日历组件包含一个名为“会议”的定期活动,该活动将于2012年8月6日每周一10点至12点安排。重复结束时间为2012年10月29日。 “会议”将于2012年9月3日每个星期一的12点到15点重新安排,RANGE设置为THISANDFUTURE,以表示所有后续活动也将安排在12点到15点之间。 到2012年10月1日,“会议”将在每周二10点到13点(而不是星期一)重新安排,并且RANGE设置为THISANDFUTURE。 此外,2012年9月17日的单一活动将在8点至10点重新安排。

iCalendar格式的事件将如下所示:

BEGIN:VCALENDAR
...
BEGIN:VEVENT
DTSTART:20120806T100000Z
DTEND:20120806T120000Z
UID:atgbutj8md5v35fuguni1of4b9o@google.com
SEQUENCE:1
SUMMARY:Meeting
RRULE:FREQ=WEEKLY;UNTIL=20121029T100000Z
END:VEVENT
BEGIN:VEVENT
DTSTART:20120903T120000Z
DTEND:20120903T150000Z
UID:atgbutj8md5v35fuguni1of4b9o@google.com
SEQUENCE:1
SUMMARY:Meeting
RRULE:FREQ=WEEKLY;UNTIL=20121029T100000Z
RECURRENCE-ID;RANGE=THISANDFUTURE:20120903T100000Z
END:VEVENT
BEGIN:VEVENT
DTSTART:20121002T100000Z
DTEND:20121002T130000Z
UID:atgbutj8md5v35fuguni1of4b9o@google.com
SEQUENCE:1
SUMMARY:Meeting
RRULE:FREQ=WEEKLY;UNTIL=20121029T100000Z
RECURRENCE-ID;RANGE=THISANDFUTURE:20121001T100000Z or 20121002T120000Z???????????
END:VEVENT
BEGIN:VEVENT
DTSTART:20120917T080000Z
DTEND:20120917T100000Z
UID:atgbutj8md5v35fuguni1of4b9o@google.com
SEQUENCE:1
SUMMARY:Meeting
RRULE:FREQ=WEEKLY;UNTIL=20121029T100000Z
RECURRENCE-ID:20120917T100000Z or 20120917T120000Z?????????
END:VEVENT
END:VCALENDAR

我不确定的值是RECURRENCE-ID和RRULES的值。

- )在第三和第四次活动​​中应使用哪个日期?他们应该引用主事件(第一个事件)还是事件第二个事件,因为这是“最近的”事件,它被重新安排?

- )如果我对RFC5545的解释是正确的,则RRULE可能不会被更改或重新安排。这意味着rrule在子事件中也是相同的。最后一次活动将于2012年10月29日10点至12点举行,但第三次活动将重新安排到次日10点。这是日历组件的重复集中的最后一个事件,还是在所有事件中都要更改UNTIL值,以便包括10月30日10点?

提前致谢! : - )

1 个答案:

答案 0 :(得分:4)

calconnect interop oct 2010中记录了使用THISANDFUTURE和互操作性重新安排的难度。

如果可以,互操作可以更容易/更安全地遵循RFC5545§3.8.4.4中的说明。

  

“RANGE”参数可能不适合重新安排特定的后续实例[...]。在这种情况下,日历应用程序可以简单地截断无界定期日历组件(即,使用“COUNT”或“UNTIL”规则部分),并为将来的实例创建两个新的无界定期日历组件。