.ics
. With supporting software, such as an email reader or calendar application, recipients of an iCalendar data file can respond to the sender easily or counter-propose another meeting date/time. The file format is specified in a proposed Internet standard (RFC 5545) for calendar data exchange.
iCalendar is used and supported by many products, including Google Calendar, Apple Calendar (formerly iCal), History and design
iCalendar was first created in 1998 by the Calendaring and Scheduling Working Group of the Internet Engineering Task Force, chaired by.ics
or .ifb
(for files containing availability information only). RFC 5545 replaced RFC 2445 in September 2009 and now defines the standard.
iCalendar data have the MIME content type ''text/calendar''.
The filename extension of ics
is to be used for files containing calendaring and scheduling information, ifb
for files with free or busy time information consistent with this MIME content type. The equivalent file type codes in Apple Macintosh operating system environments are iCal
and iFBf
.
By default, iCalendar uses the UTF-8 Limitations and future
The iCalendar format is designed to transmit calendar-based data, such as events, and intentionally does not describe what to do with that data. Thus, other programming may be needed to negotiate what to do with this data. iCalendar is meant to "provide the definition of a common format for openly exchanging calendaring and scheduling information across the Internet". While the features most often used by users are widely supported by iCalendar, some more advanced capabilities have problems. For example, most vendors do not support Journals (VJOURNAL). VTODOs have had conversion problems as well. iCalendar's calendar is also not compatible with some non- Gregorian calendars such as theTechnical specifications
Core object
The top-level element in iCalendar is the Calendaring and Scheduling Core Object, a collection of calendar and scheduling information. Typically, this information will consist of a single iCalendar object. However, multiple iCalendar objects can be grouped together. The first line must beBEGIN:VCALENDAR
, and the last line must be END:VCALENDAR
; the contents between these lines is called the "icalbody".UID
, this is now considered bad practice and a UUID should be used instead.
VERSION
is 2.0 for the current iCalendar format as of 2016. VERSION:1.0
was used to specify that data is in the old vCalendar format.
The body of the iCalendar object (the icalbody) contains single-line ''Calendar Properties'' that apply to the entire calendar, as well as one or more blocks of multiple lines that each define a ''Calendar Component'' such as an event, journal entry, alarm, or one of the other types described below.
Here is a simple example of an iCalendar object with a single calendar containing a single ''Calendar Component'', a "BEGIN:VCALENDAR VERSION:2.0 PRODID:-//hacksw/handcal//NONSGML v1.0//EN BEGIN:VEVENT UID:[email protected] DTSTAMP:19970714T170000Z ORGANIZER;CN=John Doe:MAILTO:[email protected] DTSTART:19970714T170000Z DTEND:19970715T040000Z SUMMARY:Bastille Day Party GEO:48.85299;2.36885 END:VEVENT END:VCALENDAR
Date and time format
The most common representation of date and time is a ''tz timestamp'' such as20010911T124640Z
with the format TZ
for a total fixed length of 16 characters. ''Z'' indicates the use of UTC (referring to its "''Zulu''" time zone). When used in DTSTART
and DTEND
properties, start times are inclusive while end times are not. This allows an event's end time to be the same as a consecutive event's start without those events overlapping and potentially creating (false) scheduling conflicts.
Events (VEVENT)
VEVENT
describes an event, which has a scheduled amount of time on a calendar. Normally, when a user accepts the calendar event, this will cause that time to be considered busy. A VEVENT
may include a VALARM
which allows an alarm. Such events have a DTSTART
which sets a starting time, and a DTEND
which sets an ending time. If the calendar event is recurring, DTSTART
sets up the start of the first event.
A VALARM code (reminder 1 day before):
BEGIN:VALARM TRIGGER:-PT1440M ACTION:DISPLAY DESCRIPTION:Reminder END:VALARM
VEVENT
also is used for calendar events without a specific time, such as anniversaries and daily reminders.
If the user needs to send in a cancellation for an event, the UID should be the same as the original event, and the component properties should be set to cancel.
METHOD:CANCEL STATUS:CANCELLEDFor sending an
UPDATE
for an event the UID
should match the original UID
. The other component property to be set is:
SEQUENCE:I.e., for the first update:
SEQUENCE:1In Microsoft Outlook, the
SUMMARY
corresponds to the "Subject" entry in the "Appointment" form, and DESCRIPTION
to the descriptive text below it. In addition, Outlook 2002 and Outlook 2003 demand a UID
and a DTSTAMP
.
To-do (VTODO)
VTODO explains a to-do item, i.e., an action-item or assignment. Not all calendar applications recognize VTODO items. In particular, Outlook does not export Tasks as VTODO items, and ignores VTODO items in imported calendars. The following is an example of a to-do due on April 15, 1998. An audio alarm has been specified to remind the calendar user at noon, the day before the to-do is expected to be completed and repeat hourly, four additional times. The SEQUENCE element shows this to-do has been modified twice since it was initially created.BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VTODO DTSTAMP:19980130T134500Z SEQUENCE:2 UID:[email protected] DUE:19980415T235959 STATUS:NEEDS-ACTION SUMMARY:Submit Income Taxes BEGIN:VALARM ACTION:AUDIO TRIGGER:19980414T120000 ATTACH;FMTTYPE=audio/basic:http://example.com/pub/audio- files/ssbanner.aud REPEAT:4 DURATION:PT1H END:VALARM END:VTODO END:VCALENDAR
Journal entry (VJOURNAL)
VJOURNAL is a journal entry. They attach descriptive text to a particular calendar date, may be used to record a daily record of activities or accomplishments, or describe progress with a related to-do entry. A "VJOURNAL" calendar component does not take up time on a calendar, so it has no effect on free or busy time (just like TRANSPARENT entries). In practice, few programs support VJOURNAL entries. The following is an example of a journal entry:BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VJOURNAL DTSTAMP:19970324T120000Z UID:[email protected] ORGANIZER:MAILTO:[email protected] STATUS:DRAFT CLASS:PUBLIC CATEGORIES:Project Report, XYZ, Weekly Meeting DESCRIPTION:Project xyz Review Meeting Minutes\n Agenda\n1. Review of project version 1.0 requirements.\n2. Definition of project processes.\n3. Review of project schedule.\n Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was decided that the requirements need to be signed off by product marketing.\n-Project processes were accepted.\n -Project schedule needs to account for scheduled holidays and employee vacation time. Check with HR for specific dates.\n-New schedule will be distributed by Friday.\n- Next weeks meeting is cancelled. No meeting until 3/23. END:VJOURNAL END:VCALENDAR(Note: This example is taken from RFC 2445 with the correction of changing the word 'CATEGORY' to 'CATEGORIES', which is a mistake in the original RFC)
Free/busy time (VFREEBUSY)
VFREEBUSY is a request for free/busy time, is a response to a request, or is a published set of busy time. The following is an example of published busy time information:BEGIN:VCALENDAR VERSION:2.0 PRODID:-//RDU Software//NONSGML HandCal//EN BEGIN:VFREEBUSY DTSTAMP:20151013T080000Z UID:[email protected] ORGANIZER:MAILTO:[email protected] DTSTART:19980313T141711Z DTEND:19980410T141711Z FREEBUSY:19980314T233000Z/19980315T003000Z FREEBUSY:19980316T153000Z/19980316T163000Z FREEBUSY:19980318T030000Z/19980318T040000Z URL:http://www.example.com/calendar/busytime/jsmith.ifb END:VFREEBUSY END:VCALENDAR
Other component types
Other component types include VAVAILABILITY, VTIMEZONE (time zones) and VALARM (alarms). Some components can include other components (VALARM is often included in other components).Distributing updates
The UID field distributes updates when a scheduled event changes. When the event is first generated a globally unique identifier is created. If a later event is distributed with the same UID, it replaces the original one.Calendar extensions
vCalendar and iCalendar support private software extensions, with a "X-" prefix, a number of which are in common usage. Some of these include: * X-RECURRENCE-ID - vCalendar 1.0 extension which mimics the iCalendar 2.0 RECURRENCE-ID (Nokia S60 3rd Edition) * X-EPOCAGENDAENTRYTYPE - defines the client calendar type * X-FUNAMBOL-AALARMOPTIONS * X-FUNAMBOL-ALLDAY - All Day event flag * X-MICROSOFT-CDO-ALLDAYEVENT - Microsoft Outlook all day event flag * X-MICROSOFT-CDO-BUSYSTATUS - Microsoft Outlook status information * X-MICROSOFT-CDO-INTENDEDSTATUS * X-WR-CALNAME - The display name of the calendar * X-WR-CALDESC - A description of the calendar * X-WR-RELCALID - A globally unique identifier for the calendar * X-WR-TIMEZONE * X-PUBLISHED- TTL - Recommended update interval for subscription to the calendar * X-ALT-DESC - Used to include HTML markup in an event's description. Standard DESCRIPTION tag should contain non-HTML version.vCalendar 1.0
iCalendar's design was based on the previous file format vCalendar created by the Internet Mail Consortium (IMC). Here is an example of information in vCalendar format:BEGIN:VCALENDAR VERSION:1.0 BEGIN:VEVENT CATEGORIES:MEETING STATUS:TENTATIVE DTSTART:19960401T033000Z DTEND:19960401T043000Z SUMMARY:Your Proposal Review DESCRIPTION:Steve and John to review newest proposal material CLASS:PRIVATE END:VEVENT END:VCALENDARIt has the .vcs file extension. After iCalendar was released, the Internet Mail Consortium stated that it "hopes that all vCalendar developers take advantage of these new open standards and make their software compatible with both vCalendar 1.0 and iCalendar."
Representations
xCal
xCal is anjCal
jCal is a JSON representation of iCalendar data, as defined in .hCalendar
hCalendar is an (x)HTML representation of a subset of iCalendar data using microformats.hEvent
hEvent is an HTML representation of a subset of iCalendar data usingSee also
*Notes
References
External links
* Internet Calendaring and Scheduling Core Object Specification (iCalendar) (replaces ) * iCalendar Transport-Independent Interoperability Protocol (iTIP) (replaces ) * iCalendar Message-Based Interoperability Protocol (iMIP) (replaces ) * xCal: The XML format for iCalendar (iCalendar XML Representation) * update of the data formats for including certain characters, forbidden by the existing specification, in parameter values * jCal: The JSON Format for iCalendar * New Properties for iCalendar (additional properties to the iCalendar specification) * * - This describes the relationship of vCard, vCalendar, and iCalendar, and includes IMC's request for implementors to support both vCalendar and iCalendar. * - A list of resources for iCalendar and related standards. {{DEFAULTSORT:Icalendar Computer file formats Calendaring standards Internet Standards