Введение в шаблоны повторения

Вы можете рассматривать шаблон повторения как способ описания конкретного расписания. Он содержит достаточно информации для построения списка вхождений (дат и времени) в соответствии с заданным расписанием. Шаблон повторения может содержать правила повторения, которые описывают циклы, которые в совокупности образуют общий шаблон. В общем, чем сложнее шаблон повторения, тем больше правил повторения он будет содержать. Шаблоны повторения могут включать исключения (не путать с исключениями, которые представляют ошибки, происходящие во время выполнения приложения). Исключения добавляют или удаляют даты вхождений из исходного шаблона. Исключения могут быть указаны как явные вхождения или как сам шаблон. Примеры шаблонов повторения с исключениями:

  • Каждый 2-й пятница, за исключением июня по август.
  • 1-е число каждого месяца, за исключением января, когда это должно быть 2-го числа.

Шаблоны повторения чаще всего являются периодическими, но это не обязательно. Шаблон повторения может быть полностью описан как набор предопределенных дат и времени вхождений. RFC iCalendar определяет компоненты, такие как VEVENT или VTODO, которые представляют события или задачи. Компоненты могут иметь свойства, такие как дата и время начала, описание, местоположение, участники и повторение. Таким образом, шаблон повторения обычно существует как свойство повторяющейся задачи или события. Свойства шаблона повторения, определенные iCalendar, следующие:

  • DTSTART - дата и время начала шаблона (также представляет первое вхождение, если явно не исключено).
  • RRULE - задает правило повторения для набора повторений.
  • RDATE - определяет список дат и времени, которые необходимо включить в набор повторений.
  • EXRULE - задает правило повторения для исключений из набора повторений.
  • EXDATE - определяет список исключений по датам и времени из набора повторений.

Только DTSTART является обязательным, и должно быть только одно DTSTART. Все другие свойства являются необязательными и могут быть указаны более одного раза. Aspose.iCalendar принимает строку в формате iCalendar и считывает шаблон повторения в объект RecurrencePattern. Строка может быть полным описанием компонента iCalendar (например, полным VEVENT) или может быть просто фрагментом, который содержит только шаблон повторения. Как только шаблон повторения загружен в объект RecurrencePattern, вы можете:

  • Изучить и модифицировать шаблон программно с помощью методов и свойств, предоставляемых Aspose.iCalendar
  • Генерировать даты/время вхождений в указанном диапазоне дат.
  • Сохранить шаблон в формате iCalendar.

Следующий фрагмент кода показывает, что часть RRULE содержит правило повторения.

Посмотрите на образцы шаблонов повторения для иллюстраций о том, как создавать шаблоны повторения.

О модели объектов Aspose.iCalendar

Пространство имен Aspose.iCalendar содержит все классы, предоставляемые компонентом Aspose.iCalendar. RecurrencePattern и RecurrenceRule являются центральными классами Aspose.iCalendar и предоставляют конкретные реализации соответствующих элементов RFC 2445.

Класс RecurrencePattern представляет весь шаблон повторения. Вы можете создать новый шаблон повторения с нуля с использованием конструкции по умолчанию или загрузить существующий шаблон в формате iCalendar, используя статический метод FromiCalendar. Класс RecurrenceRule представляет часть RRULE или EXRULE шаблона повторения. RecurrenceRule предоставляет ряд свойств, которые напрямую сопоставляются с их аналогами в стандарте iCalendar. Например, ByMonth сопоставляется с BYMONTH в iCalendar и так далее. Изучая или устанавливая значения свойств RecurrenceRule, вы можете анализировать или изменять правило повторения. Для получения дополнительной информации и примеров кода смотрите RecurrencePattern и RecurrenceRule в справочнике API.

Образцы шаблонов

Этот раздел включает в себя следующие темы:

  • Последний день месяца.
  • Последний рабочий день каждого месяца.
  • Последний понедельник года.
  • Пятница первой недели ISO 8601 года.
  • Первая пятница года.

Последний день месяца

Этот образец шаблона повторения указывает на последний день месяца, каждого месяца.

RRULE:FREQ=MONTHLY;BYMONTHDAY=-1

Аналогично, если вы хотите вхождение на день перед последним днем месяца, используйте BYMONTHDAY=-2. Если вы укажете BYMONTHDAY=31, то в соответствии со стандартом iCalendar в месяцах, имеющих менее 31 дня, вхождения не будут генерироваться.

Последний рабочий день каждого месяца

Этот образец шаблона повторения указывает на последний рабочий день месяца, каждого месяца. Рабочие дни определяются как дни, в которые вы работаете. В Европе, например, рабочие дни обычно с понедельника по пятницу.

RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1

Указанное правило определяет все рабочие дни месяца и выбирает последний из них. В результате получается последний рабочий день месяца.

Последний понедельник года

Этот образец шаблона повторения указывает на событие, которое происходит в последний понедельник года.

RRULE:FREQ=YEARLY;BYDAY=-1MO

Пятница первой недели ISO 8601 года

Этот образец шаблона повторения указывает на пятницу первой недели года. В спецификации ISO 8601 первая неделя года - это первая неделя, в которой как минимум четыре дня. Когда год начинается в субботу, например, неделя 1 - это неделя, непосредственно следующая за ней, начиная с понедельника, 3 января.

FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR

Первая пятница года

Этот образец шаблона повторения указывает на событие, которое происходит в первую пятницу года.

FREQ=YEARLY;BYDAY=1FR

В 1999 году, например, первая пятница года - это 1999/01/01, в то время как пятница первой недели ISO 8601 - это 1999/01/08.