我目前正在尝试设置自己可以订阅的假期 iCalendar,因为我不想依赖 3rd 方服务。
我目前正在尝试VEVENT
为圣诞节制作 s。第 2 次、第 3 次和第 4 次降临,以及圣诞节假期是直截了当的,但是我有很大的问题来模拟第一次降临。
具体来说,问题是第一次降临可以在 11 月和 12 月(11 月 27 日到 12 月 3 日)
我怎样才能制作一个重复性事件(或者,更具体地说,是RRULE
)来涵盖第一次降临的所有情况?
我试过的
我的第一个想法是这样的:
FREQ=YEARLY;INTERVAL=1;BYMONTH=11,12;BYMONTHDAY=27,28,29,30,1,2,3;BYDAY=SU
我们的想法是只选择 11 月 27 日至 12 月 3 日之间的一个星期日。这当然不起作用,因为BYMONTH
将搜索扩展到 11 月和 12 月的所有日子,并将BYMONTHDAY
搜索限制在两个月中的那些日子。即11月1日,11月2日,... 12月27日,12月28日,...,这当然不是我想要的。
接下来,我尝试使用andBYYEARDAY=331,332,333,334,335,336,337
代替,但不幸的是我的 webdav 服务器(Nextcloud,据我所知使用 Sabre。我收到错误消息“无效的 BYYEARDAY 规则”)不支持此功能。BYMONTHDAY
BYMONTH
我的下一个想法是使用多个RRULE
s —— 至少我在 RFC 中没有看到任何段落说明RRULE
最多只允许一个。所以我最终得到:
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=SU;BYMONTHDAY=27,28,29,30;BYMONTH=11
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=SU;BYMONTHDAY=1,2,3;BYMONTH=12
也没有用。我最后的手段是创建两个单独VEVENT
的 s,一个与第一个在RRULE
上面,一个与第二个RRULE
在上面,但其他方面相同。这有效,但它让我感到困惑。
没有更好的解决方案吗?你会怎么做?