1

我们的团队一直在研究一种表示重复的正确方法,我们偶然发现了 RRule https://www.rfc-editor.org/rfc/rfc2445(在 iCalendar rfc 中指定)。

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

这里正确的 RRule 表达式是什么?还是有可能?

4

3 回答 3

1

您应该知道RFC5545取代了 RFC2445。

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

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

  • 知道BYYEARDAY列表中 12 月 31 日的偏移量是:-1
  • 那么 12 月 29 日的偏移量为:-3
  • 同样,11 月 29 日的偏移量为:-33

从中RRULE写入属性如下:

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

于 2014-02-05T06:52:37.797 回答
1

一种选择是RRULE使用INTERVAL=29. 就像是:

RRULE:FREQ=DAILY;INTERVAL=29

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

于 2014-02-12T06:29:39.347 回答
0

不,无效日期会被 RRULE 丢弃。所以即使你可以这样做:

RRULE:FREQ=MONTHLY;BYMONTHDAY=29

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

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

于 2014-02-05T06:01:17.850 回答