您可以为以下情况指定规则吗?
[每月的第一天每月重复。除非是星期天,否则第二天(每月的2号星期一)再次发生。除非它在星期五,否则在前一天(上个月的最后一个星期五)重复发生。
这只是一个练习,以查看可能的方法以及如何解决各种问题。
我尝试使用3个单独的RRULE进行设置:
RRULE:FREQ=MONTHLY;BYMONTHDAY=1;BYDAY=MO,TU,WE,TH,FR
RRULE:FREQ=MONTHLY;BYMONTHDAY=2;BYDAY=MO
RRULE:FREQ=MONTHLY;BYSETPOS=-1;BYDAY=FR
第一条规则可以满足我的要求-仅当月份的第一天在工作日内。第二条规则可以满足我的要求-如果第一条规则是在星期日,则此规则选择到下一个星期一,也就是该月的第二个星期一。第三个规则是问题。这将选择每个月的最后一个星期五。但是我想要的是只有在星期五的某个月的最后一天。或者换句话说,仅当月份的最后一个星期五是该月的最后一天时才使用。这有点棘手,因为您不能使用BYMONTHDAY,因为不同月份的天数不同,而且我认为BYMONTHDAY = -1不能按预期工作。有人可以为“仅在星期五的月份的最后一天”提出正确的规则吗?
RFC5545在3.3.10 Recurrence Rule中有一个表,它指定:
BYxxx
和FREQ
多个规则部分值的依存关系。 BYxxx
的评估顺序: If multiple BYxxx rule parts are specified, then after evaluating
the specified FREQ and INTERVAL rule parts, the BYxxx rule parts
are applied to the current set of evaluated occurrences in the
following order: BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY,
BYHOUR, BYMINUTE, BYSECOND and BYSETPOS; then COUNT and UNTIL are
evaluated.
将所有这些放在一起时,您的第三个RRULE
应该看起来像:
RRULE:FREQ=MONTHLY;BYMONTHDAY=-1;BYDAY=FR
基本上说,每个月的最后一天(星期五)将是重复周期的一部分-据我了解,这是您想要的结果-。