是否可以在一个RRULE中指定每两年多个月的第一个周末日发生的事件?使用二月和九月作为测试用例,我的第一个想法是:
FREQ=YEARLY;DTSTART=20140320T070000Z;INTERVAL=2;BYSETPOS=1;BYMONTH=2,9;BYDAY=SA,SU
但BYSETPOS仅将设置减少到2月份。在我发布here之后,我认为将频率更改为每月会发挥作用,但每隔一年应用一次间隔2会使事情变得混乱,因为间隔应用于每月频率而不是每年频率。
我这是一个新问题,因为我在原始问题中没有包含间隔。
我认为将其拆分为多个套圈会起作用,但这会大大增加我的应用程序的这个区域的复杂性,所以我希望有一个年度频率的单个套件。
谢谢!
答案 0 :(得分:0)
FWIW,并且由于您将其视为潜在的解决方法,RFC5545已删除了在单个VEVENT / VTODO(https://tools.ietf.org/html/rfc5545#section-3.6.1)中具有多个RRULE属性的功能。它存在于RFC2445中。
然后,除非有人找到一个非常优雅和简单的解决方案,否则你可能会留下一些令人费解的东西,以至于大多数客户都会对它进行抨击(不知道互操作性对你来说很重要)。
我认为这有两个选择:
答案 1 :(得分:0)
像这样添加BYSETPOS可能会按预期工作:
FREQ=YEARLY;INTERVAL=2;BYMONTH=2,9;BYDAY=+1SA,+1SU;BYSETPOS=1,3
答案 2 :(得分:0)
您可以尝试的是利用bysetpos允许您在一年内选择规则的选定实例,然后您可以将实例数限制为该月的第一周(通过设置天数为了避免月份有更多或更少周的情况,这可以让你选择一年中的第一个和第三个实例。
然后给出:
DTSTART:20140320T060000Z
FREQ=YEARLY;INTERVAL=2;WKST=MO;BYSETPOS=1,3;BYMONTH=2,9;BYMONTHDAY=1,2,3,4,5,6,7;BYDAY=SA,SU
将是:
Sat 2014/Sept/6
Sat 2016/Feb/6
Sat 2016/Sep/3
...
Sun 2024/Sep/1
使用dateutil-python和http://jkbr.github.io/验证了这一点,