Introduzindo Padrões de Recorrência

Você pode pensar em um padrão de recorrência como uma forma de descrever uma programação específica. Ele contém informações suficientes para construir uma lista de ocorrências (datas e horários) de acordo com uma programação dada. Um padrão de recorrência pode conter regras de recorrência que descrevem ciclos que se combinam para formar o padrão geral. Em geral, quanto mais complexo for o padrão de recorrência, mais regras de recorrência ele conterá. Padrões de recorrência podem incluir exceções (não confundir com exceções que representam erros ocorridos durante a execução da aplicação). Exceções adicionam ou removem datas de ocorrência ao padrão original. As exceções podem ser especificadas como ocorrências explícitas ou como um padrão por si mesmas. Exemplos de padrões de recorrência com exceções:

  • Todo segundo sexta‑feira, exceto de junho a agosto.
  • O dia 1 de cada mês, exceto janeiro, quando deve ser no dia 2.

Os padrões de recorrência são na maioria das vezes periódicos, mas não precisam ser. Um padrão de recorrência pode ser descrito completamente apenas como um conjunto de datas e horários de ocorrência pré‑definidos. O RFC iCalendar define componentes, como VEVENT ou VTODO, que representam eventos ou tarefas. Os componentes podem ter propriedades como data/hora de início, descrição, local, participantes e recorrência. Portanto, um padrão de recorrência normalmente existe como uma propriedade de uma tarefa ou evento recorrente. As propriedades de padrão de recorrência definidas pelo iCalendar são:

  • DTSTART - a data e hora de início do padrão (também representa a primeira ocorrência se não for excluída explicitamente).
  • RRULE - especifica uma regra de repetição para um conjunto de recorrência.
  • RDATE - define uma lista de datas e horas a incluir em um conjunto de recorrência.
  • EXRULE - especifica uma regra de repetição para exceções de um conjunto de recorrência.
  • EXDATE - define uma lista de exceções de data e hora de um conjunto de recorrência.

Apenas o DTSTART é obrigatório e deve haver somente um DTSTART. Todas as outras propriedades são opcionais e podem ser especificadas mais de uma vez. Aspose.iCalendar recebe uma string no formato iCalendar e lê o padrão de recorrência em um RecurrencePattern objeto. A string pode ser uma descrição completa de um componente iCalendar (por exemplo, um VEVENT completo) ou pode ser apenas um fragmento que contém somente o padrão de recorrência. Uma vez que o padrão de recorrência esteja carregado em um objeto RecurrencePattern, você pode:

  • Examinar e modificar o padrão programaticamente via métodos e propriedades fornecidos por Aspose.iCalendar
  • Gerar datas/horas de ocorrência em um intervalo de datas especificado.
  • Salvar o padrão no formato iCalendar.

O trecho de código a seguir mostra que a parte RRULE contém a regra de recorrência.

Veja o exemplos de padrões de recorrência para ilustrações sobre como criar padrões de recorrência.

Sobre o modelo de objetos Aspose.iCalendar

O namespace Aspose.iCalendar contém todas as classes fornecidas pelo componente Aspose.iCalendar. RecurrencePattern e RecurrenceRule são as classes centrais do Aspose.iCalendar e fornecem implementações concretas dos elementos correspondentes ao RFC 2445.

A classe RecurrencePattern representa o padrão de recorrência completo. Você pode criar um novo padrão de recorrência do zero usando o construtor padrão ou carregar um padrão existente no formato iCalendar usando o método estático FromiCalendar. A classe RecurrenceRule representa a parte RRULE ou EXRULE de um padrão de recorrência. RecurrenceRule expõe várias propriedades que mapeiam diretamente para seus equivalentes no padrão iCalendar. Por exemplo, ByMonth corresponde a BYMONTH no iCalendar e assim por diante. Ao examinar ou definir valores das propriedades de RecurrenceRule, você pode analisar ou modificar uma regra de recorrência. Para mais informações e exemplos de código, veja RecurrencePattern e RecurrenceRule na Referência da API.

Padrões de exemplo

Esta seção inclui os seguintes tópicos:

  • O último dia do mês.
  • O último dia útil de cada mês.
  • A última segunda‑feira do ano.
  • Sexta‑feira da primeira semana ISO 8601 do ano.
  • Primeira sexta‑feira do ano.

O último dia do mês

Estes exemplos padrão de recorrência especifica o último dia do mês, todos os meses.

RRULE:FREQ=MONTHLY;BYMONTHDAY=-1

De forma similar, se você quiser uma ocorrência em um dia antes do último dia do mês, use BYMONTHDAY=-2. Se você especificar BYMONTHDAY=31, então, de acordo com o padrão iCalendar, não será gerada nenhuma ocorrência nos meses que tenham menos de 31 dias.

O último dia útil de cada mês

Estes exemplos padrão de recorrência especifica o último dia útil do mês, todos os meses. Dias úteis são definidos como os dias em que você trabalha. Na Europa, por exemplo, os dias úteis são normalmente de segunda a sexta.

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

A regra acima especifica todos os dias úteis de um mês e seleciona o último deles. O resultado final é o último dia útil de um mês.

A última segunda‑feira do ano

Este exemplo padrão de recorrência especifica um evento que ocorre na última segunda‑feira do ano.

RRULE:FREQ=YEARLY;BYDAY=-1MO

Sexta-feira da primeira semana ISO 8601 do ano

Este exemplo padrão de recorrência especifica a sexta‑feira da primeira semana do ano. Na especificação ISO 8601, a primeira semana do ano é a primeira semana que contém pelo menos quatro dias. Quando um ano começa em sábado, por exemplo, a semana 1 é a semana imediatamente seguinte, começando na segunda‑feira, 3 de janeiro.

FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR

Primeira sexta-feira do ano

Este exemplo padrão de recorrência especifica um evento que ocorre na primeira sexta‑feira do ano.

FREQ=YEARLY;BYDAY=1FR

Em 1999, por exemplo, a primeira sexta‑feira do ano é 1999/01/01, enquanto a sexta‑feira da primeira semana ISO 8601 é 1999/01/08.