Introducción a los patrones de recurrencia
Puedes pensar en un patrón de recurrencia como una forma de describir un horario particular. Contiene la información suficiente para construir una lista de ocurrencias (fechas y horas) según un horario dado. Un patrón de recurrencia puede contener reglas de recurrencia que describen ciclos que se combinan para formar el patrón global. En general, cuanto más complejo es un patrón de recurrencia, más reglas de recurrencia contendrá. Los patrones de recurrencia pueden incluir excepciones (no confundir con excepciones que representan errores que ocurren durante la ejecución de la aplicación). Las excepciones añaden o eliminan fechas de ocurrencia al patrón original. Las excepciones pueden especificarse como ocurrencias explícitas o como un patrón propio. Ejemplos de patrones de recurrencia con excepciones:
- Cada segundo viernes, excepto de junio a agosto.
- El 1.º de cada mes, excepto en enero, cuando debe ser el 2.
Los patrones de recurrencia son normalmente periódicos, pero no tienen que serlo. Un patrón de recurrencia puede describirse completamente como un conjunto de fechas y horas de ocurrencia predefinidas. El RFC iCalendar define componentes, como VEVENT o VTODO, que representan eventos o tareas. Los componentes pueden tener propiedades como fecha y hora de inicio, descripción, ubicación, asistentes y recurrencia. Un patrón de recurrencia, por lo tanto, normalmente existe como una propiedad de una tarea o evento recurrente. Las propiedades de patrones de recurrencia definidas por iCalendar son:
- DTSTART - la fecha y hora de inicio del patrón (también representa la primera ocurrencia si no se excluye explícitamente).
- RRULE - especifica una regla repetida para un conjunto de recurrencia.
- RDATE - define una lista de fechas y horas para incluir en un conjunto de recurrencia.
- EXRULE - especifica una regla repetida para excepciones de un conjunto de recurrencia.
- EXDATE - define una lista de excepciones de fecha y hora de un conjunto de recurrencia.
Solo se requiere DTSTART y debe haber solo un DTSTART. Todas las demás propiedades son opcionales y pueden especificarse más de una vez. Aspose.iCalendar toma una cadena en formato iCalendar y lee el patrón de recurrencia en un RecurrencePattern objeto. La cadena puede ser una descripción completa de un componente iCalendar (por ejemplo, un VEVENT completo) o solo un fragmento que contenga únicamente el patrón de recurrencia. Una vez que el patrón de recurrencia se carga en un objeto RecurrencePattern, usted puede:
- Examinar y modificar el patrón programáticamente mediante métodos y propiedades proporcionados por Aspose.iCalendar
- Generar fechas/horas de ocurrencia en un rango de fechas especificado.
- Guardar el patrón en formato iCalendar.
El siguiente fragmento de código muestra que la parte RRULE contiene la regla de recurrencia.
Mira el ejemplos de patrones de recurrencia para ilustraciones sobre cómo crear patrones de recurrencia.
Acerca del modelo de objetos Aspose.iCalendar
El espacio de nombres Aspose.iCalendar contiene todas las clases proporcionadas por el componente Aspose.iCalendar. RecurrencePattern y RecurrenceRule son las clases centrales de Aspose.iCalendar y proporcionan implementaciones concretas de los elementos correspondientes del RFC 2445.
La clase RecurrencePattern representa el patrón completo de recurrencia. Puedes crear un nuevo patrón de recurrencia desde cero usando el constructor por defecto o cargar un patrón existente en formato iCalendar mediante el método estático FromiCalendar. La clase RecurrenceRule representa la parte RRULE o EXRULE de un patrón de recurrencia. RecurrenceRule expone varias propiedades que se asignan directamente a sus contrapartes en el estándar iCalendar. Por ejemplo, ByMonth se corresponde con BYMONTH en iCalendar, etc. Al examinar o establecer los valores de las propiedades de RecurrenceRule puedes analizar o modificar una regla de recurrencia. Para más información y ejemplos de código, consulta RecurrencePattern y RecurrenceRule en la Referencia de API.
Patrones de ejemplo
Esta sección incluye los siguientes temas:
- El último día del mes.
- El último día laborable de cada mes.
- El último lunes del año.
- Viernes de la primera semana ISO 8601 del año.
- Primer viernes del año.
El último día del mes
Estos ejemplos patrón de recurrencia especifica el último día del mes, cada mes.
RRULE:FREQ=MONTHLY;BYMONTHDAY=-1
De forma similar, si deseas una ocurrencia en el día anterior al último día del mes, usa BYMONTHDAY=-2. Si especificas BYMONTHDAY=31, según el estándar iCalendar, no se generará ninguna ocurrencia en los meses que tengan menos de 31 días.
El último día laborable de cada mes
Estos ejemplos patrón de recurrencia especifica el último día laborable del mes, cada mes. Los días laborables se definen como los días en los que se trabaja. En Europa, por ejemplo, los días laborables son normalmente de lunes a viernes.
RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1
La regla anterior especifica todos los días laborables de un mes y selecciona el último de ellos. El resultado neto es el último día laborable del mes.
El último lunes del año
Este ejemplo patrón de recurrencia especifica un evento que ocurre el último lunes del año.
RRULE:FREQ=YEARLY;BYDAY=-1MO
Viernes de la primera semana ISO 8601 del año
Este ejemplo patrón de recurrencia especifica el viernes de la primera semana del año. En la especificación ISO 8601, la primera semana del año es la primera semana que tiene al menos cuatro días. Cuando un año comienza en sábado, por ejemplo, la semana 1 es la semana inmediatamente siguiente, que comienza el lunes 3 de enero.
FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR
Primer viernes del año
Este ejemplo patrón de recurrencia especifica un evento que ocurre el primer viernes del año.
FREQ=YEARLY;BYDAY=1FR
En 1999, por ejemplo, el primer viernes del año es 1999/01/01, mientras que el viernes de la primera semana ISO 8601 es 1999/01/08.