Icalendar 每29个月一次

Icalendar 每29个月一次,icalendar,recurrence,rfc2445,rrule,Icalendar,Recurrence,Rfc2445,Rrule,我们的团队一直在研究一种正确的方法来代表reucurrences,我们偶然发现了RRule(在iCalendar rfc中指定) 我正在尝试编写一个rrule,它允许我生成距离每月第一天29天的日期。看起来是这样的:1月29日,3月1日,3月29日,4月29日 这里正确的RRule表达式是什么?或者可能吗?不,RRULE会丢弃无效日期。所以即使你能做到: RRULE:FREQ=MONTHLY;BYMONTHDAY=29 每年二月(闰年除外)都会跳过 可以为一个事件指定多个RRULE,但实际上很

我们的团队一直在研究一种正确的方法来代表reucurrences,我们偶然发现了RRule(在iCalendar rfc中指定)

我正在尝试编写一个rrule,它允许我生成距离每月第一天29天的日期。看起来是这样的:1月29日,3月1日,3月29日,4月29日


这里正确的RRule表达式是什么?或者可能吗?

不,RRULE会丢弃无效日期。所以即使你能做到:

RRULE:FREQ=MONTHLY;BYMONTHDAY=29
每年二月(闰年除外)都会跳过

可以为一个事件指定多个RRULE,但实际上很少有日历软件支持此功能。

您应该知道superseeds RFC2445

要绕过闰年问题,应使用
RRULE
BYYEARDAY
并使用负偏移量

因此,首先指定一年中的第29天,然后指定第60天(31(1月)+29(2月1日之后)),然后从年后开始计算闰年:

  • 知道
    BYYEARDAY
    列表中的12月31日偏移量为:-1
  • 那么12月29日的偏移量是:-3
  • 同样,11月29日的偏移量为:-33
从中写入
RRULE
属性,如下所示:

RRULE:FREQ=每年;BYYEARDAY=29,60,-278,…,-33,-3


一种选择是用
间隔=29
制作
RRULE
。比如:

RRULE:FREQ=每日;间隔=29


并非所有iCalendar客户端都支持无限重复集,因此您应该包括一个
直到
计数
组件,以满足您的需要。

感谢您的快速响应。。。。看起来这真的很复杂。我认为规则类似于“从每个月的第一天算起的X天数”,适用于任何一个月的某一天