在ical4j(3.2.3)中创建递归规则时,我遇到了一个意外行为。
我对ical4j很陌生,但我已经研究过了https://www.rfc-editor.org/rfc/rfc5545#section-3.3.10,在这里的另一个问题中引用:https://stackoverflow.com/a/7800560/19390104.不过我找不到解决办法。
其目的是在特定的工作日每月召开一次会议。第一个日期应为下一个工作日,下一个日期应在一个月后。
让我举一个简单的例子:
开始日期:2022年6月22日。工作日:周三。会议应每月重复3次。
预期结果为:【06-22-2022,07-20-2022,08-17-2022】。
为了实现这一点,我尝试了以下递归规则:"FREQ=MONTHLY;BYDAY=WE;COUNT=3"
实际结果如下:【06-22-2022,06-29-2022,07-06-2022】。因此,当使用BYDAY重复规则时,似乎实际上忽略了每月频率,并且重复基于每周频率。
有人能帮我告诉我,为什么忽略每月的频率,以及我应该如何设计一个适用于所需用例的递归规则吗?
更新:我用每4周一次的频率得到了正确的结果。
是否只有在定义了特定的一周后,工作日的每月重复才有效?所以ical4j知道,在哪一周应该重复月度模式?
例如:";FREQ=每月;BYDAY=4WE;COUNT=3";对于一个月中的每四个星期三(这会返回一个不同的结果,只计算从第一个日期开始的周数)?
我认为问题是COUNT不能像FREQ=MONTHLY那样工作。您共享的rfc部分中有一个表,用于指示是限制(减少)还是扩展(复制)出现次数。对于此组合,COUNT将把每月的一天扩展为三个月的一天。
因此,我认为在本月的第一个星期三,你可以试试:
FREQ=每月;截止日期=1WE
或者本月的最后一个星期三:
FREQ=每月;BYDAY=-1WE
要限制出现次数,可以使用UNTIL或指定DTEND属性。