2.1.3.2.2.2 Template: Weekly Recurrences

ABNF Description

 weekly-template= "FREQ=WEEKLY" [byday-part] [common-parts]

Template Examples

Every Monday and Tuesday:

 FREQ=WEEKLY;BYDAY=MO,TU

Every Monday and Tuesday at 3:30 P.M:

 FREQ=WEEKLY;BYDAY=MO,TU;BYMINUTE=30;BYHOUR=15

The Monday and Tuesday of every two weeks, for 7 occurrences:

 FREQ=WEEKLY;BYDAY=MO,TU;INTERVAL=2;COUNT=7

The Sunday and Monday of every two weeks, as interpreted by someone who considers a week to start on Monday (common in European Union countries). This is different in that, after a Sunday instance, there will be a seven-day gap before the next instance on a Monday:

 FREQ=WEEKLY;BYDAY=SU,MO;INTERVAL=2;WKST=MO

Importing to Calendar objects

An RRULE or X-MICROSOFT-RRULE matching this template SHOULD<278> be imported into PidLidAppointmentRecur as specified in the following table. A VEVENT MUST NOT specify both an RRULE and an X-MICROSOFT-RRULE. The BYDAY recurrence part MUST be week independent.

AppointmentRecurrencePattern field

Value

ReaderVersion

Set to 0x3004

WriterVersion

Set to 0x3004

RecurFrequency

Set to 0x200B

PatternType

Set to 0x0001. Can be overridden by X-MICROSOFT-CALSCALE, see section 2.1.3.1.1.8.

CalendarType

Imported from X-MICROSOFT-CALSCALE (see section 2.1.3.1.1.8).

FirstDateTime

Set as specified in [MS-OXOCAL] section 2.2.1.44.1.

Period

Set to the value of INTERVAL

SlidingFlag

Set to 0x00000000

PatternTypeSpecific.Week.Sa-Su

Set to a bitmask representation of BYDAY as specified in the table that follows this table. If no BYDAY is specified, the day of week for DTSTART (in the time zone specified by PidLidTimeZoneStruct) MUST be used.

PatternTypeSpecific.Month.Day

(unset)

PatternTypeSpecific.MonthNth.Sa-Su

(unset)

PatternTypeSpecific.MonthNth.N

(unset)

EndType

If the recurrence is infinite, set EndType to 0x00002023. If the recurrence is specified with a COUNT, set EndType to 0x00002022. Otherwise, set EndType to 0x00002021.

OccurrenceCount

Set to the number of occurrences of the recurrence based on UNTIL or COUNT. If the recurrence is infinite, set OccurrenceCount to 0x0000000A.

FirstDOW

Set to the correct value based on WKST as specified in section 2.1.3.2.2.1.

DeletedInstanceCount / DeletedInstanceDates

See section 2.1.3.1.1.20.13

ModifiedInstanceCount / ModifiedInstanceDates

See section 2.1.3.1.1.20.18

StartDate

Set to the date portion of DTSTART, in the time zone specified by PidLidTimeZoneStruct. This date is stored in minutes after midnight Jan 1, 1601. Note that this value MUST be evenly divisible by 1440.

EndDate

Set to the start date of the last instance of a recurrence, in the time zone specified by PidLidTimeZoneStruct. This date is stored in minutes after midnight January 1, 1601. If the recurrence is infinite, set EndDate to 0x5AE980DF. Note that this value MUST be evenly divisible by 1440, except for the special value 0x5AE980DF.

ReaderVersion2

Set to 0x00003006

 WriterVersion2

Set to 0x00003009

StartTimeOffset

Set to (60*BYHOUR + BYMINUTE)

EndTimeOffset

Set to (StartTimeOffset + PidLidAppointmentDuration)

ExceptionCount / ExceptionInfo

See section 2.1.3.1.1.20.18

(ReservedBlocks and ExtendedExceptions)

Refer to [MS-OXOCAL]

The following table specifies how to map BYDAY values to a PatternTypeSpecific.Week.Sa-Su bitmask.

BYDAY value

PatternTypeSpecific.Week.Sa-Su bit

SU

0x00000001

MO

0x00000002

TU

0x00000004

WE

0x00000008

TH

0x00000010

FR

0x00000020

SA

0x00000040

Exporting from Calendar objects

The AppointmentRecurrencePattern structure ([MS-OXOCAL] section 2.2.1.44.5) in the PidLidAppointmentRecur property ([MS-OXOCAL] section 2.2.1.44) SHOULD<279> be exported as the property specified by the table of recurrence properties in section 2.1.3.2.2.1. The exported property MUST be assigned the value generated by the Recurrence template specified by the table of recurrence templates specified in section 2.1.3.2.2.1.

If PidLidAppointmentRecur is being exported with the Weekly Recurrence template, then it MUST contain the recurrence parts specified in the following table.

Recurrence part

Value

FREQ

Set to 'WEEKLY'

INTERVAL

Set to Period. If the value is 1, omit this recurrence part.

BYDAY

Set to the BYDAY representation of the PatternTypeSpecific.Week.Sa-Su bitmask.

COUNT

If EndType is 0x00002022, set to OccurrenceCount. Otherwise, omit this recurrence part.

UNTIL

If EndType is 0x00002021, SHOULD<280> be set to (EndDate + StartTimeOffset), converted from the time zone specified by PidLidTimeZoneStruct to the UTC time zone. Alternatively, MAY<281> be set to midnight on the date specified by EndDate. If EndType is not 0x00002021, omit this recurrence part.

WKST

If Period is greater than 1, FirstDOW MUST be exported as the WKST recurrence part as specified in section 2.1.3.2.2.1. Otherwise, the WKST recurrence part SHOULD<282> be omitted.