如何为具有多个BYSETPOS值的重复事件生成RRULE?

时间:2018-07-18 03:20:08

标签: rrule

我正在尝试为每个月的第一个和第二个星期一和星期二发生的事件定义一个RRULE。这等于每月发生四个事件。我认为这是正确的:

FREQ=MONTHLY;INTERVAL=1;BYSETPOS=1,2;BYDAY=MO,TU

但是它只会在每月的第一星期一/星期二生成事件。如果我删除星期二,它将在该月的第一个和第二个星期一都发生。为什么我不能同时指定多个BYSETPOS值(如RRULE spec所允许的)以及多个BYDAY值?

如何明确定义这样的规则,因为显然这不是正确的方法?

显然我不太清楚BYSETPOS属性。
上面链接的文档指出:

  

bysetpos-如果给出,则必须为整数或整数序列,   正面或负面。每个给定的整数将指定一个出现   数字,对应于规则中第n次出现   频率周期。例如,如果与一个   每月的频率,以及每个工作日的(MO,TU,WE,TH,FR)   会导致每个月的最后一个工作日。

因此,我认为使用BYSETPOS来指定频率周期内期望的出现次数(作为整数序列)是正确的。

感谢您的指导。

1 个答案:

答案 0 :(得分:1)

  

如何正确定义这样的规则

就像这样:BYDAY=1MO,1TU,2MO,2TU

RFC 5545中的相关报价:

  Each BYDAY value can also be preceded by a positive (+n) or
  negative (-n) integer.  If present, this indicates the nth
  occurrence of a specific day within the MONTHLY or YEARLY "RRULE".

  For example, within a MONTHLY rule, +1MO (or simply 1MO)
  represents the first Monday within the month, whereas -1MO
  represents the last Monday of the month.
  

为什么我不能同时指定多个BYSETPOS值(RRULE规范似乎允许)以及多个BYDAY值?

您可以-实际上您用BYSETPOS=1,2指定了2。您要求获得第一和第二结果。但是您希望每月获得4次出现(第一个星期一,第一个星期二,第二个星期一,第二个星期二),因此,如果您真的想要使用BYSETPOS,则应指定4次出现:{{ 1}}。我不建议使用BYSETPOS=1,2,3,4BYSETPOS更清晰易懂。