2009-01-30 42 views
6

我正在使用Google的RFC2445實現(http://code.google.com/p/google-rfc-2445/)進行重複規則。如果我從1月30日開始定義月度復發,那麼少於30天(即2月)的月份將被完全跳過。因此,Google API將於1月30日,3月30日,4月30日等返回,不太好。我期望它能夠迴歸:1月30日,2月28日,3月30日,4月30日。重複規則定義(RFC2445)問題

同樣,如果我選擇了1月31日的開始日期,那麼任何小於31天的月份都將被跳過。

這可能是正確的按照RFC2445規範或可能是一個錯誤。你怎麼看?

我的主要問題是,有沒有什麼辦法可以定義一個規則:「在每個月的30日發生;或者如果30日不存在,則是月份的最後一天」。我不相信。有什麼建議麼?

在此先感謝。

問候, 科馬克

回答

17

答案是:FREQ = MONTHLY; BYMONTHDAY = 28,29,30; BYSETPOS = -1,轉化爲在每月的30日「復發;或該月的最後一天,如果沒有按30號」不存在「。

0

好,看着RFC 2445本身它肯定看來,你所看到的行爲是正確的:

如果發現BYxxx規則的一部分,其值超出了可用範圍(即二月的BYMONTHDAY = 30),他們只是被忽略。

我能想到的唯一解決方案是使用多個重複規則,即每個月的第30個和第二個月的最後一個。

0

它看起來像你正確的RFC跳過這些日期。如果您DTSTART是1月31日,並沒有指定在你的復發規則BYMONTHDAY(或者,如果BYMONTHDAY是31號),然後它會簡單地忽略在幾個月該規則不存在這樣的日子:

如果發現 這超出了可用範圍 BYxxx規則部分的值(即BYMONTHDAY = 30月),他們 會被忽略。

但是,你應該能夠指定-1 BYMONTHDAY,並將它使用一個月,不管它可能恰好是最後一天。

的BYMONTHDAY規則部分指定 逗號字符(ASCII十進制44) 分開一個月的天數列表。 有效值爲1到31或-31到-1。 例如,-10代表第十個 到該月的最後一天。

+0

負數幾乎工作;提問者在31個月內需要-2個月,在30個月(或29或28個)內需要-1個月。更接近... – 2009-02-08 06:06:27

+0

這是真的,我不認爲這是可能的,但他自己找到了BYSETPOS,這正是他想要的。 – 2009-02-08 13:57:28