6

繰り返しルールにGoogle の RFC2445 実装 ( http://code.google.com/p/google-rfc-2445/ ) を使用しています。1 月 30 日に始まる MONTHLY 繰り返しを定義すると、30 日未満の月 (つまり 2 月) は完全にスキップされます。したがって、Google API は 1 月 30 日、3 月 30 日、4 月 30 日などを返します。良くありません。1月30日、2月28日、3月30日、4月30日に戻ってくると思います。

同様に、1 月 31 日の開始日を選択した場合、31 日未満の月はスキップされます。

これは、RFC2445 仕様に従って正しいか、バグである可能性があります。どう思いますか?

私の主な質問は、「毎月 30 日に繰り返す、または 30 日が存在しない場合は月末」というルールを定義する方法はないかということです。私はあるとは思わない。助言がありますか?

前もって感謝します。

よろしく、コーマック

4

3 に答える 3

17

答えは次のとおりです: FREQ=MONTHLY;BYMONTHDAY=28,29,30;BYSETPOS=-1 これは、「毎月 30 日に繰り返すか、30 日が存在しない場合はその月の最終日」に変換されます。

于 2009-02-01T17:06:28.277 に答える
0

RFC がこれらの日付をスキップしたことについては、あなたが正しいようです。DTSTARTが 1 月 31 日でBYMONTHDAY、繰り返しルールで a を指定しない場合 (またはがBYMONTHDAY31 日である場合)、そのような日がない月のルールは単純に無視されます。

使用可能な範囲を超える BYxxx ルール部分の値が見つかった場合 (つまり、2 月の BYMONTHDAY=30)、それらは単純に無視されます。

ただし、 -1 を指定しBYMONTHDAYて、月の最終日を使用できるようにする必要があります。

BYMONTHDAY ルール部分は、COMMA 文字 (ASCII 10 進数 44) で区切られた月の日のリストを指定します。有効な値は 1 ~ 31 または -31 ~ -1 です。たとえば、-10 は、その月の 10 日から最終日までを表します。

于 2009-01-30T17:22:57.043 に答える
0

RFC 2445自体を見ると、あなたが見ている動作は間違いなく正しいようです。

使用可能な範囲を超える BYxxx ルール部分の値が見つかった場合 (つまり、2 月の BYMONTHDAY=30)、それらは単純に無視されます。

私が考えることができる唯一の解決策は、複数の繰り返しルールを使用することです。つまり、毎月 30 日に 1 つ、2 月の最終日にもう 1 つです。

于 2009-01-30T17:18:10.207 に答える