ПРИМЕЧАНИЕ. В следующем ответе показано, как это сделать с помощью устаревшего RFC! Оставляю для справки, вдруг кому понадобится. Смотрите правильный ответ, чтобы узнать больше полезных фактов!
Вы можете сделать это, добавив соответствующие ежегодные повторяющиеся правила смежной пятницы и соседнего понедельника, которые отображают только те годы, когда дата имеет соответствующий день недели:
BEGIN:VEVENT
DTSTAMP:20130210T211949Z
UID:[email protected]
DTSTART;VALUE=DATE:20121231
DTEND;VALUE=DATE:20121231
SUMMARY:New Year’s Day (moved from a Saturday)
RRULE:FREQ=YEARLY;BYMONTH=12;BYMONTHDAY=31
EXRULE:FREQ=YEARLY;BYMONTH=12;BYMONTHDAY=31;BYDAY=MO,TU,WE,TH,SA,SU
END:VEVENT
BEGIN:VEVENT
DTSTAMP:20130210T211949Z
UID:[email protected]
DTSTART;VALUE=DATE:20130102
DTEND;VALUE=DATE:20130102
SUMMARY:New Year’s Day (moved from a Sunday)
RRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=2
EXRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=2;BYDAY=TU,WE,TH,FR,SA,SU
END:VEVENT
Вместе с исходным событием (вы можете аналогичным образом отфильтровать это для BYDAY=MO,TU,WE,TH,FR
, если вы не хотите, чтобы фактический праздник отображался в вашей ленте), вы охватываете все годы, не получая ложных срабатываний за годы, когда не было необходимости перемещать время. выходной в будний день:
BEGIN:VEVENT
DTSTAMP:20130210T211949Z
UID:[email protected]
DTSTART;VALUE=DATE:20130101
DTEND;VALUE=DATE:20130101
SUMMARY:New Year’s Day
RRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=1
END:VEVENT
Календарь Google с удовольствием использует и понимает мой пример фида iCalendar. Текущий iCal (и устройства iOS, синхронизированные с календарем Google, который импортировал этот канал), к сожалению, содержит небольшие ошибки (зарегистрировано как ошибка 13188350 [ссылка, вероятно, работает только для репортера]), и не удается применить указанные фильтры дней недели.
Но, надеюсь, это тоже скоро исправят.
person
Community
schedule
11.02.2013