我目前正在为 RFC 5545 的解释细节而苦苦挣扎。 第 3.3.10 节指出,基本上,所有BYxxx
字段都显示出扩展行为,除了BYDAY
,它具有特定规则,具体取决于BYxxx
实际存在的字段。
但是,我不清楚对于RRULE
指定多个{ BYMONTH
, BYWEEKNO
, BYYEARDAY
} 的情况到底应该发生什么。在我看来,第 3.3.10 节中的表格允许解释我必须分别扩展每个规则部分,即构建三个集合的并集
- 扩容
BYMONTH
等BYMONTHDAY
_ - 扩大
BYWEEKNO
- 扩大
BYYEARDAY
一直尊重解释BYDAY
行为的注释 2。结果可能有点违反直觉(当然,用户不太可能指定此类规则)。但是至少有一种实现声称可以这样做:
对于
YEARLY
频率,如果指定BYMONTH
,BYWEEKNO
、 和BYYEARDAY
规则将彼此分开扩展。
如果存在多个规则部分,则其他实现(例如http://recurrence-expansion-service.appspot.com/或 Google 日历)似乎使用限制策略:
- 展开
BYMONTH
/BYMONTHDAY
- 然后限制使用
BYWEEKNO
和BYYEARDAY
有效地创建交叉而不是联合。该方法似乎与第 3.3.10 节规定的规则部分的应用顺序有些一致:
如果指定了多个
BYxxx
规则部分,则在评估指定FREQ
和INTERVAL
规则部分之后,BYxxx
规则部分将按以下顺序应用于当前评估的事件集:BYMONTH
、BYWEEKNO
、BYYEARDAY
、BYMONTHDAY
、BYDAY
、BYHOUR
、BYMINUTE
和BYSECOND
;BYSETPOS
然后COUNT
和UNTIL
被评估。
但是,将其解释为规则部分是限制而不是扩展在我看来与标准第 44 页上显示的扩展/限制表直接矛盾。
因此,我的问题是:
RFC5545 是否实际上明确指定了多个BYMONTH
,BYWEEKNO
和的同时存在如何BYYEARDAY
被解释?如果是这样,它在哪里说明?而如果标准在这方面实际上并不清楚,是否有“事实上的标准”首选方式来处理这种情况?