Правило повторения iCalendar для запуска мероприятия: каждые две недели, по понедельникам и средам, каждые 30 минут в течение дня мероприятия? - PullRequest
0 голосов
/ 05 июля 2019

Мне нужно запланировать событие в виде правила iCalendar (RFC5545). Событие должно быть запущено: каждые две недели, по понедельникам и средам, каждые 30 минут в день мероприятия.

Пока я создал эту строку правила: FREQ = НЕДЕЛЬНЫЙ; ИНТЕРВАЛ = 1; BYDAY = МО, МЫ; BYHOUR = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 17,18,19,20,21,22,23; BYMINUTE = 30

Я ожидаю, что мероприятие будет проходить «каждые две недели, по понедельникам и средам, каждые 30 минут в течение дня».

Но на самом деле это значит: «каждые две недели, по понедельникам и средам, на каждой 30-й минуте в течение дня»

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Я полагаю, что вы можете просто добавить еще одну минуту в течение часа к BYMINUTE, как вы обычно делаете в crontab:

FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE;BYHOUR=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23;BYMINUTE=0,30

В настоящее время выдается следующее rule.all() при https://jakubroztocil.github.io/rrule/:

Wed,    10  Jul 2019    00:00:53    GMT
Wed,    10  Jul 2019    00:30:53    GMT
Wed,    10  Jul 2019    01:00:53    GMT
Wed,    10  Jul 2019    01:30:53    GMT
...
Wed,    10  Jul 2019    23:00:53    GMT
Wed,    10  Jul 2019    23:30:53    GMT
Mon,    15  Jul 2019    00:00:53    GMT
Mon,    15  Jul 2019    00:30:53    GMT
...
Mon,    15  Jul 2019    23:00:53    GMT
Mon,    15  Jul 2019    23:30:53    GMT
Wed,    17  Jul 2019    00:00:53    GMT
Wed,    17  Jul 2019    00:30:53    GMT
Wed,    17  Jul 2019    01:00:53    GMT

что я считаю, это то, что вы хотите.

0 голосов
/ 06 июля 2019

Дмитрий, Ниже приведено возможное решение, однако вы должны заметить, что некоторые приложения (Google?) Не принимают повторяющиеся минуты, что, как я полагаю, приводит к вашему вопросу.

Вы должны думать о модификаторах RRULE как о выполняющих одно из двух действий: 1 расширение и 2 ограничение. Например, ваше повторяющееся событие повторяется каждые 30 минут.

См. Пример для «Каждых 15 минут для 6 случаев» и «Каждый 20-й понедельник года» на https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html.

Итак, ваш пример: FREQ = MINUTES; INTERVAL = 30 «расширяется», но вы также хотите «ограничить» его только каждым вторым понедельником и средой, поэтому добавьте BYDAY:

FREQ = ПРОТОКОЛ; INTERVAL = 30; BYDAY = 2MO, 2WE

Эта таблица https://icalevents.com/2447-need-to-know-the-possible-combinations-for-repeating-dates-an-ical-cheatsheet/ может помочь увидеть допустимые комбинации, которые дают расширение или которые ограничивают повторяющиеся биты.

...