我在用着谷歌-rfc-2445 https://code.google.com/archive/p/google-rfc-2445/根据根据生成重复事件rfc-2445 https://www.ietf.org/rfc/rfc2445.txt:
“VEVENT”的“DTSTART”属性指定包含的开始
事件。对于重复发生的事件,它还指定了第一个
重复集中的实例。
因此,例如 RRULE 表示每周五发生 5 次的事件:
DTSTART;TZID=US-Eastern:20160204T090000
RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=FR;INTERVAL=1;
所以根据rfc-2445 https://www.ietf.org/rfc/rfc2445.txt它将生成 6 个事件。第一个活动于Thursday 4 February 2016
,第二个事件Friday 5 February 2016
, 等等。
如果第一个事件不在模式中,我怎样才能实现它排除它?在上面的示例中,它应该排除第一次出现的情况,4 February 2016
。如果定义DTSTART;TZID=US-Eastern:20160205T090000
这是星期五,它应该保留第一个出现的位置。
是否可以通过定义这样的“排除规则”来完成RRULE
本身或者我需要检查代码,如果DTSTART
与定义的日期不同BYDAY
我应该在代码中查找最接近的日期(手动)并进行更改DTSTART
因此?
UPDATE好的,根据 rfc-2445 和谷歌组上的这个问题:https://groups.google.com/forum/#!topic/google-rfc-2445/xqYFe411ysA https://groups.google.com/forum/#!topic/google-rfc-2445/xqYFe411ysA
“EXDATE”属性可用于排除指定的值
“DT开始”。但是,在这种情况下,原始的“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 个事件,所以它always删除第一个事件。