1

プログラムでカレンダーにイベントを追加しようとしています。たとえば、2 月の第 1 月曜日ごとに、イベントを毎年繰り返すようにしたいと考えています。私が使用しているルールは次のとおりです。

FREQ=YEARLY;BYDAY=1MO;BYMONTH=2;INTERVAL=1;COUNT=11;

問題は、1 月に開始日を指定してイベントを作成し、毎年 1 月に繰り返すように設定すると、正常に機能することです。しかし、開始日を 2 月以外に設定し、同じルールで繰り返すように設定すると、月曜日ではなく別の日に繰り返されます。その日は、イベントの開始日である月によって異なります。うるう年は日が1日変わるので、日数を数えているようです。

アップデート:

DTSTART上記のようにイベントを作成すると、次のことが起こることに気付きました: たとえば、2 月にイベントを作成し、3 月に繰り返すように設定した場合、ルールは、イベントの月から月の日数を取得します。セット(2月)。したがって、2 月にイベントを作成し、3 月の最終日に繰り返すように設定すると、3 月 28 日ごと、または閏年の 29 日ごとに繰り返されます (予想される 31 日ではなく)。

別の例: 2013 年 1 月にイベントを作成しDTSTART、2 月の第 1 月曜日ごとに繰り返すように設定します。2013 年 1 月の最初の月曜日に対応する 2013 年 2 月の日付 (この場合は 2 月 7 日) にイベントを作成します (1 月 7 日は 2013 年 1 月の最初の月曜日であるため)。毎年、このイベントは 2 月の第 1 木曜日に繰り返されます。

4

2 に答える 2

1

イベントを追加するときDTSTARTは、望ましくない副作用を避けるために、イベントの最初の発生と同じ月にする必要があります

于 2013-02-11T14:09:52.740 に答える
0

あなたが持っているものとあなたが期待するものに関して、あなたはより多くの詳細を与えることができますか?

BEGIN:VCALENDAR
PRODID:byhand
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:20130205T090000Z
UID:SO_14702482_2b
SUMMARY:SO_14702482_2b
DTSTART:20130104T090000Z
RRULE:FREQ=YEARLY;BYDAY=1MO;BYMONTH=2;INTERVAL=1;COUNT=11;
END:VEVENT
END:VCALENDAR

発生します(2つの異なるプラットフォームでテスト済み)@ 09h00Z on:20130104,20130204,20140203、20150202,20160201、20170206、..

その間

BEGIN:VCALENDAR
PRODID:byhand
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:20130205T090000Z
UID:SO_14702482_1b
SUMMARY:SO_14702482_1b
DTSTART:20130204T090000Z
RRULE:FREQ=YEARLY;BYDAY=1MO;BYMONTH=2;INTERVAL=1;COUNT=11;
END:VEVENT
END:VCALENDAR

発生します(ここでもテスト済み)@ 09h00Z on:20130204、20140203、20150202、20160201、20170206、..

主な違いは、RFC5545で指定されているように、DTSTARTがオカレンスの一部であるということです。

于 2013-02-05T10:01:40.387 に答える