复发规则定义(RFC2445)问题
-
20-08-2019 - |
题
我使用谷歌的RFC2445实现( http://code.google。 COM / p /谷歌-RFC-2445 / )复发的规则。如果我在一月月30日定义每月复发开始不到30天(即二月)将完全跳过。因此,谷歌API将返回1月30日,3月30日,4月30日,等也不好。我希望它返回:1月30日,2月28日,3月30日,4月30日
同样,如果我挑月31日的开始日期,然后用少于31天任何月份会被跳过。
这可以是每RFC2445规格正确,或者可以是一个错误。你觉得呢?
我的主要问题是,有没有什么办法来定义规则,称“复发在每个月的30日;或该月的最后一天,如果30日不存在”。我不相信有。任何建议?
预先感谢。
此致 科马克
解决方案
答案是:FREQ = MONTHLY; BYMONTHDAY = 28,29,30; BYSETPOS = -1转换为“在每月的30号复发;或该月的最后一天,如果第30不存在”
其他提示
它看起来像你说得对的RFC跳过这些日期。如果您DTSTART
是1月31日,并没有指定在你的复发规则BYMONTHDAY
(或者,如果BYMONTHDAY
是31号),然后它会简单地忽略在几个月该规则不存在这样的日子:
如果发现BYxxx规则部分的值 这超出了可用范围 (即,BYMONTHDAY =在2月30日),它们 被简单地忽略。
然而后,你应该能够指定-1 BYMONTHDAY
,并用它一个月,不管它可能恰好是最后一天。
在BYMONTHDAY规则部分指定一 COMMA字符(ASCII十进制44) 当月的天分隔的列表。 有效值是1到31或-31至-1。 例如,-10表示第十 该月的最后一天。
好了,看着 RFC 2445 本身它肯定看来,你的行为”再看到的是正确的:
如果发现BYxxx规则部分的值是其超出可用范围(即,BYMONTHDAY = 30月),它们被简单地忽略。
我能想到的唯一解决方法是使用多次复发的规则,即一为每月的30日,另一个用于最后一天在二月。