Icalendar syntax: Difference between revisions

From wikinotes
No edit summary
 
No edit summary
Line 1: Line 1:
= Documentation =
<blockquote>
{| class="wikitable"
| RFC-5545 || https://tools.ietf.org/html/rfc5545
|}
</blockquote><!-- documentation -->
= Basic Structure =
= Basic Structure =
<blockquote>
<blockquote>

Revision as of 14:19, 29 October 2022

Documentation

RFC-5545 https://tools.ietf.org/html/rfc5545


Basic Structure

ics files are composed of blocks consisting of nested

  • calendars
  • events
  • alarms

A single file can contain multiple calendars,
Calendars can contain multiple events,
events can contain multiple alarms etc.

The syntax looks like the following (indentation added for readability).

Simple Calendar Event


BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
CREATED:20160229T160511Z
LAST-MODIFIED:20160229T161249Z
DTSTAMP:20160229T161249Z
UID:eaba636d-13b6-4ab1-835a-af1cb8744df5
SUMMARY:Vacation
DTSTART;TZID=America/Toronto:20200713T090000
DTEND;TZID=America/Toronto:20200708T180000
END:VEVENT
END:VCALENDAR

Calendar with Alarms


BEGIN:VCALENDAR
  PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
  VERSION:2.0

  BEGIN:VEVENT
    CREATED:20160305T171040Z
    LAST-MODIFIED:20160305T171105Z
    DTSTAMP:20160305T171105Z
    UID:00ccc052-ac26-4aa3-9105-f02b2e12e497
    SUMMARY:Some Birthday
    RRULE:FREQ=YEARLY
    DTSTART;VALUE=DATE:20160613
    DTEND;VALUE=DATE:20160614
    TRANSP:TRANSPARENT
    
    BEGIN:VALARM
      ACTION:DISPLAY
      TRIGGER;VALUE=DURATION:PT0S
      DESCRIPTION:Default Mozilla Description
    END:VALARM

    BEGIN:VALARM
      ACTION:DISPLAY
      TRIGGER;VALUE=DURATION:-P1W
      DESCRIPTION:Default Mozilla Description
    END:VALARM

  END:VEVENT
END:VCALENDAR

Recurring Events

Recurring events are controlled by the RRULE parameter.
It is configured on a single line, the following is a rough
summary of how it works.

BEGIN:VEVENT
  CREATED:20160305T171040Z
  DTSTAMP:20160305T171105Z
  SUMMARY:Some Birthday
  RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END: VEVENT
'FREQ'       : vFrequency,        # Mandatory (weekly, yearly, daily, ...)
'UNTIL'      : vDDDTypes,
'COUNT'      : vInt,              # Number of times to recur. (if not present, always recur)
'INTERVAL'   : vInt,              # Every nth 'FREQ' value

# In addition to frequency, you can specify when
# a reminder occurs. A FREQ='yearly' reminder with
# a BYWEEKNO='-1' would issue a reminder on the last
# day of every year.
'BYSECOND'   : '0,1,2'            # (0-60) comma-separated list of seconds
'BYMINUTE'   : '0,1,2'            # (0-59) comma-separated list of minutes
'BYHOUR'     : '0,1,2'            # (0-23) comma-separated list of hours
'BYWEEKNO'   : '0,1,2'            # (1-53) comma-separated list of weeks of the year
'BYMONTHDAY' : '0,1',  '-1,-2'    # (1-31)((-1)-(-31))   comma-separated list of days of month
'BYYEARDAY'  : '1,2',  '-1,-2'    # (1-366)((-1)-(-366)) comma-separated list of days of year
'BYMONTH'    : '
'BYDAY'      : vWeekday,

# 'BYSETPOS' modifies a 'BY*' parameter.
# In the example below, a reminder is issued on the
# last workday(mon-fri) every month.
# FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1
'BYSETPOS'   : vInt,

# Starting the week on a different day
# can have an effect on events with modified
# intervals.
'WKST'       : 'SU','MO', ..