RRule每月29日

时间:2014-02-05 05:40:46

标签: icalendar recurrence rfc2445 rrule

我们的团队一直在研究表示重现的正确方法,我们偶然发现了RRule http://tools.ietf.org/html/rfc2445(在iCalendar rfc中指定)。

我正在尝试编写一个规则,它允许我生成距离每个月第一天29天的日期。所以它看起来像这样:jan29,mar1,mar29,apr29。

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

3 个答案:

答案 0 :(得分:1)

您应该知道RFC5545取代了RFC2445。

要解决闰年问题,您应该使用RRULEBYYEARDAY并使用负偏移量。

因此,首先指定一年中的第29天,然后指定第60天(31(对于1月)+29(对于1月1日之后)),然后围绕从年末算起的闰年:

  • 知道BYYEARDAY列表中的12月31日偏移量为:-1
  • 然后12月29日的偏移量为:-3
  • 类似于11月29日的偏移量为:-33

RRULE属性的编写如下:

  

RRULE:FREQ = YEARLY; BYYEARDAY = 29,60,-278,..., - 33,-3

答案 1 :(得分:0)

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

RRULE:FREQ=MONTHLY;BYMONTHDAY=29

每年二月都会被跳过(闰年除外)。

可以为1个事件指定多个RRULE,但很少有日历软件支持此事件。

答案 2 :(得分:0)

一种选择是使用RRULE制作INTERVAL=29。类似的东西:

RRULE:FREQ=DAILY;INTERVAL=29

并非所有iCalendar客户端都支持无限重复集,因此您应该包含UNTILCOUNT组件以满足您的需求。