我正在尝试解析一个RRULE并显示一个月内重复事件有效的几周.我查看了RFC2445 doc(http://www.ietf.org/rfc/rfc2445.txt)并且不是那么清楚.
我知道例如规则:
RRULE FREQ=MONTHLY;INTERVAL=1;BYDAY=TH,FR,WE;BYSETPOS=10,11,12,7,8,9,1,2,3,4,5,6
Run Code Online (Sandbox Code Playgroud)
是星期三,星期五,星期五,在本月的第1,第2,第3和第4周.
要么
RRULE FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,MO;BYSETPOS=3,4,5,6;
Run Code Online (Sandbox Code Playgroud)
是在本月的第2周和第3周的周一和周二.
要么
RRULE FREQ=MONTHLY;INTERVAL=1;BYDAY=TH,WE;BYSETPOS=-1,-2
Run Code Online (Sandbox Code Playgroud)
是在本月的最后一周的周三和周四.
我通过另一个程序生成了这些,但我不确定它是如何实际生成它们的.
因此,我遇到的问题是了解BYSETPOS如何描述一个月的复发周.最终目标是能够解析如上所述的RRULE并显示如下:
对于: RRULE FREQ=MONTHLY;INTERVAL=1;BYDAY=TH,FR,WE;BYSETPOS=10,11,12,7,8,9,1,2,3,4,5,6
节目: Thur,Friday,Wed on week:1,2,3,4
对于: RRULE FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,MO;BYSETPOS=3,4,5,6;
节目: Tues, Monday on week:2,3
对于: RRULE FREQ=MONTHLY;INTERVAL=1;BYDAY=TH,WE;BYSETPOS=-1,-2
节目: Whu,Wed on last week
最好的解决方案是objective-c中的一个字符串,但是如果它是另一种C语言,我可以弄明白.即使只是解释BYSETPOS如何与BYDAY一起工作也会很棒.
因此,我遇到的问题是了解BYSETPOS如何描述一个月的复发周.
一旦计算出与规则剩余部分相对应的实例,BYSETPOS就不代表周数,而只代表第n个实例.例如,FREQ=MONTHLY;INTERVAL=1;BYDAY=TU,MO对应于每月的每个星期一和星期二,每月.因此,对于每个月,您首先计算一组(例如,如果您参加2014年7月,则为9个条目).然后BYSETPOS为您提供应该保留的集合中的"索引",-1,-2表示集合中的最后2个条目.
继续2014年7月的示例,基本规则将返回以下集合:(7月1日,7日,8日,14日,15日,21日,22日,28日,29日).鉴于BYSETPOS = 1,2,-1,-2,我们将保留7月1日,7日,28日和29日.
您想查看http://tools.ietf.org/html/rfc5545,它废弃了RFC2245,并对重复规则有更详细的描述.
| 归档时间: |
|
| 查看次数: |
2654 次 |
| 最近记录: |