Спецификация iCalendar RRULE несколько раз?

Я разрабатываю некоторое программное обеспечение, которое взаимодействует с API Календаря Google, и одна функция, которой смогут воспользоваться мои пользователи, - это установка нескольких событий для одного «класса» (т.е. класс 2-5 в некоторые дни и 3 -6 на других).

Возможно ли, чтобы правило повторения указывало разное время для разных дней, позволяя мне создавать одно повторяющееся событие вместо нескольких?

Спасибо!


person ccrama    schedule 10.07.2016    source источник


Ответы (2)


Возможно ли, чтобы правило повторения указывало разное время для разных дней, позволяя мне создавать одно повторяющееся событие вместо нескольких?

Нет, не совсем, но такого результата можно добиться и другими методами.

  • Если есть шаблон, вы можете комбинировать несколько RRULE. Например, один повтор повторяется через день, начиная с понедельника в 2 часа, второй повторяется через день, начиная со вторника в 3 часа. Таким образом, объединенный результат будет Пн в 2, Вт в 3, Ср в 2 и так далее. Однако обратите внимание, что в соответствии с RFC вы НЕ ДОЛЖНЫ определять более одного RRULE (см. https://tools.ietf.org/html/rfc5545#section-3.8.5.3)

его НЕ СЛЕДУЕТ указывать более одного раза. Набор повторений, сгенерированный с несколькими свойствами "RRULE", не определен.

Таким образом, поведение зависит от фактической реализации, и я не знаю об API Календаря Google. Однако большинство известных мне библиотек поддерживают несколько RRULE, так что вам стоит попробовать.

  • Опять же, если есть шаблон, вы также можете использовать BYSETPOS. Это немного сложно понять, но в основном вам нужно сгенерировать набор вхождений (например, за неделю), а затем выбрать те, которые являются допустимыми. Попробуйте что-то вроде этого (несколько строк для ясности):
DTSTART=20160711T140000
FREQ=WEEKLY
BYDAY=MO,TU,WE,TH,FR
BYHOUR=14,15
BYSETPOS=1,4,5,8,9

Это будет чередовать понедельник в 2, вторник в 3, среду в 2 и так далее. Опять же, вам нужен четкий повторяющийся шаблон, чтобы это сработало.

  • Если шаблона нет, и вы просто хотите, чтобы в некоторые дни было другое время, объедините RRULE с RDATE и EXDATE, чтобы добавить или удалить особые события.
person rlanvin    schedule 11.07.2016

Вы можете использовать несколько RRULE в Календаре Google, но я не рекомендую это делать. См. v3 документацию по API -- recurrence[]. Передать массив строк.

В то время как Календарь Google будет учитывать несколько RRULE, Календарь Apple в настоящее время будет использовать только один. Это означает, что любой, кто использует Календарь Apple на своем ноутбуке/телефоне (синхронизированный с Календарем Google), не увидит все повторения.

Кроме того, несмотря на то, что Календарь Google будет правильно повторять событие, письменное описание повторов, используемое в пользовательском интерфейсе, описывает только одно RRULE.

например. Еженедельно по четвергам до 15 мая 2021 г., а не еженедельно по вторникам и четвергам до 15 мая 2021 г.

person Dion Larson    schedule 27.01.2021