我们的团队一直在研究表示重现的正确方法,我们偶然发现了RRule http://tools.ietf.org/html/rfc2445(在iCalendar rfc中指定)。
我正在尝试编写一个规则,它允许我生成距离每个月第一天29天的日期。所以它看起来像这样:jan29,mar1,mar29,apr29。
这里正确的RRule表达是什么?或者甚至可能吗?
答案 0 :(得分:1)
您应该知道RFC5545取代了RFC2445。
要解决闰年问题,您应该使用RRULE
和BYYEARDAY
并使用负偏移量。
因此,首先指定一年中的第29天,然后指定第60天(31(对于1月)+29(对于1月1日之后)),然后围绕从年末算起的闰年:
BYYEARDAY
列表中的12月31日偏移量为:-1 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客户端都支持无限重复集,因此您应该包含UNTIL
或COUNT
组件以满足您的需求。