我正在使用google-rfc-2445根据 rfc-2445 生成重复事件:
“VEVENT”的“DTSTART”属性指定事件的包含开始。对于重复事件,它还指定重复集中的第一个实例。
因此,例如每周五发生 5 次的事件的 RRULE:
DTSTART;TZID=US-Eastern:20160204T090000
RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=FR;INTERVAL=1;
所以根据rfc-2445它将产生 6 个事件。第一个事件 on Thursday 4 February 2016
,第二个事件 on Friday 5 February 2016
,依此类推。
如果它不在模式中,我如何实现它将排除第一个事件?在上面的示例中,它应该排除第一次出现的4 February 2016
. 如果定义DTSTART;TZID=US-Eastern:20160205T090000
哪个是星期五,则应保留第一次出现。
是否可以通过自行定义此类“排除规则”来完成,RRULE
或者我需要在代码中进行检查,如果DTSTART
与中定义的日期不同,BYDAY
我应该(手动)在代码中查找最接近的日期并DTSTART
相应地进行更改?
更新 好的,根据 rfc-2445 和谷歌组上的这个问题:https ://groups.google.com/forum/#!topic/google-rfc-2445/xqYFe411ysA
“EXDATE”属性可用于排除
“DTSTART”中指定的值。然而,在这种情况下,原始“DTSTART”日期
仍必须由日历和调度系统维护,因为
原始“DTSTART”值与其他属性(例如“RECURRENCE-ID”)具有内在的使用依赖性。
看起来我需要使用EXDATE
属性来实现我需要的东西。尝试通过遵循 RRULE 来实现这一点:
EXDATE;TZID=Asia/Jerusalem:20160210T000000
RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=WE;INTERVAL=1;
开始日期是:2016-02-10T00:00:00.000+02:00
在以下代码中:
DateTimeIterable dti = DateTimeIteratorFactory.createDateTimeIterable(RRULE, DTSTART, dateTimeZone, true);
但它只返回 4 个事件,所以它总是删除第一个事件。