fileformer
search⌘KtranslateENexpand_moreupload_fileConvert
Converters8 file families · 44 direct conversions
What changes in a conversionarrow_forward
home / dates / ics

An .ics invite is plain text that has to agree on what “9:00” means

iCalendar (RFC 5545) is nested BEGIN/END blocks of content lines, folded at 75 octets with CRLF and a leading space. A time can be a date, floating local time, UTC with a Z, or wall-clock time in a named zone, and repeating rules expand in that zone, so DST moves the UTC instants and not the meeting. Open an .ics, or one of the two samples, to see every line, every event in your own time zone, and a recurrence expanded across a clock change.

folder_openOpen .icsWeekly meeting inviteExport with problemsdownloadDownload refolded
weekly-sync.ics: invite with VTIMEZONE, weekly RRULE + UNTIL, EXDATE, escaped text, a folded UTF-8 description, alarm, all-day event
line 26 · click any line below
DTSTART;TZID=Europe/London:20261006T090000
nameDTSTART
TZIDtime zone of the value: Europe/London (IANA), defined in a VTIMEZONE
value2026-10-06 09:00 Europe/London = 2026-10-06 08:00Z = 2026-10-06 11:00 your time (Europe/Istanbul)

Events, in the file’s time and yours

2 VEVENT(s) · your time zone Europe/Istanbul
Weekly design sync
as written20261006T090000 · Europe/London
instant2026-10-06 08:00Z
your timeTue 2026-10-06 11:00
length30 min
repeatsFREQ=WEEKLY;BYDAY=TU;UNTIL=20261222T090000Z
except20261103T090000
no problems
Team offsite (two days)
as written20261029 · all day
instantall-day: no instant, shown on that date everywhere
your timesame date
length2 day(s), end date exclusive
no problems
physical lines · bar = octets, marker at 7554 lines
1BEGIN:VCALENDAR
2VERSION:2.0
3PRODID:-//FileFormer//ICS sample//EN
4CALSCALE:GREGORIAN
5METHOD:REQUEST
6BEGIN:VTIMEZONE
7TZID:Europe/London
8BEGIN:DAYLIGHT
9TZOFFSETFROM:+0000
10TZOFFSETTO:+0100
11TZNAME:BST
12DTSTART:19700329T010000
13RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
14END:DAYLIGHT
15BEGIN:STANDARD
16TZOFFSETFROM:+0100
17TZOFFSETTO:+0000
18TZNAME:GMT
19DTSTART:19701025T020000
20RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
21END:STANDARD
22END:VTIMEZONE
23BEGIN:VEVENT
24UID:8f1c2b7e-weekly-sync@fileformer.example
25DTSTAMP:20261003T120000Z
26DTSTART;TZID=Europe/London:20261006T090000
27DTEND;TZID=Europe/London:20261006T093000
28RRULE:FREQ=WEEKLY;BYDAY=TU;UNTIL=20261222T090000Z
29EXDATE;TZID=Europe/London:20261103T090000
30SUMMARY:Weekly design sync
31LOCATION:Room 4.12\, King’s Cross
32DESCRIPTION:Agenda: 1) review last week\, 2) Ölmühle café booking\; 3) n
33↳ ext steps.\nDial-in details are in the shared doc.
34ORGANIZER;CN="Ada Lovelace":mailto:ada@fileformer.example
35ATTENDEE;CN=Grace Hopper;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:mailto:grace@example.com ← 102 octets
36SEQUENCE:0
37STATUS:CONFIRMED
38TRANSP:OPAQUE
39BEGIN:VALARM
40ACTION:DISPLAY
41DESCRIPTION:Design sync in 10 minutes
42TRIGGER:-PT10M
43END:VALARM
44END:VEVENT
45BEGIN:VEVENT
46UID:offsite-2026@fileformer.example
47DTSTAMP:20261003T120000Z
48DTSTART;VALUE=DATE:20261029
49DTEND;VALUE=DATE:20261031
50SUMMARY:Team offsite (two days)
51TRANSP:TRANSPARENT
52END:VEVENT
53END:VCALENDAR
54
check_circleCRLF line endings.As required.
info1 physical line(s) over 75 octets.Readers usually cope, but the spec says fold; mail systems can wrap them at random points.
check_circleMETHOD:REQUEST.iTIP scheduling message (RFC 5546).
check_circle1 VTIMEZONE(s): Europe/London.Embedded DST rules; readers usually prefer their own up-to-date database when the name is an IANA zone.
check_circle1 alarm(s).DISPLAY -PT10M.
recurrence lab · expanded here with your browser’s time zone database

Wall clock or UTC: where a weekly meeting lands after the clocks change

With DTSTART;TZID=…, every occurrence keeps its local time and its UTC instant shifts by an hour at each DST change. Write the same start in UTC (…Z) and the instants stay put, so in local time the meeting jumps to 08:00 or 10:00. Each row shows both. Gaps (times skipped in spring) and repeated hours are marked.

weekly across DSTlast Friday monthly31st of each month29 February yearlyspring-forward gapMon/Wed/Fri biweekly
10 occurrence(s) (COUNT=10) in Europe/London.
#with TZID (wall clock)its UTC instantoffsetif stored as UTC insteadnote
1Tue 2026-10-06 09:002026-10-06 08:00Z+01:002026-10-06 09:00 local
2Tue 2026-10-13 09:002026-10-13 08:00Z+01:002026-10-13 09:00 local
3Tue 2026-10-20 09:002026-10-20 08:00Z+01:002026-10-20 09:00 local
4Tue 2026-10-27 09:002026-10-27 09:00Z+00:002026-10-27 08:00 localDST: UTC instant moved +1 h
5Tue 2026-11-03 09:002026-11-03 09:00Z+00:002026-11-03 08:00 localDST: UTC instant moved +1 h
6Tue 2026-11-10 09:002026-11-10 09:00Z+00:002026-11-10 08:00 localDST: UTC instant moved +1 h
7Tue 2026-11-17 09:002026-11-17 09:00Z+00:002026-11-17 08:00 localDST: UTC instant moved +1 h
8Tue 2026-11-24 09:002026-11-24 09:00Z+00:002026-11-24 08:00 localDST: UTC instant moved +1 h
9Tue 2026-12-01 09:002026-12-01 09:00Z+00:002026-12-01 08:00 localDST: UTC instant moved +1 h
10Tue 2026-12-08 09:002026-12-08 09:00Z+00:002026-12-08 08:00 localDST: UTC instant moved +1 h
folding & escaping lab

75 octets, not 75 characters

Lines longer than 75 bytes are split with CRLF + space. Count characters instead of UTF-8 bytes and a line of accented text overflows; split in the middle of a multi-byte character and some readers show a replacement glyph. Text values also escape backslash, comma, semicolon and newline. Type a description to see both.

120characters
144octets in the logical line
2physical lines after folding
folded by octets (correct)
75BDESCRIPTION:Agenda: café at Ölmühle\, then review\; bring laptops\nSecon␍␊
70B␠d line of the description with “smart quotes”, and an em dash.
folded by characters (common bug: lines run over 75 octets)
78BDESCRIPTION:Agenda: café at Ölmühle\, then review\; bring laptops\nSecond l␍␊
67B␠ine of the description with “smart quotes”, and an em dash.

Reference

written asformwhat readers do
20261006DATE (VALUE=DATE)a calendar day; all-day events. DTEND is exclusive: 20261006-20261007 is one day
20261006T090000floatingthe same wall time in every zone: alarms “at 9 wherever I am”
20261006T080000ZUTCone instant; recurrences step in UTC, so local time moves at DST
TZID=Europe/London:…T090000local with zonewall-clock time in that zone; recurrences keep 09:00 through DST
TZID=W. Europe Standard TimeWindows zone namewhat Outlook writes; needs mapping to an IANA zone
propertymeaning
UIDglobally unique id; updates and cancellations match on it
DTSTAMPwhen this copy was created (UTC)
SEQUENCErevision number; higher wins when an invite is updated
DTSTARTstart; its form decides how recurrences expand
DTEND / DURATIONend (exclusive) or length: one or the other, never both
RRULErecurrence rule; COUNT or UNTIL, not both
EXDATE / RDATEdates removed from / added to the rule
RECURRENCE-IDmarks an override of one occurrence
METHODiTIP verb: PUBLISH, REQUEST, REPLY, CANCEL…
ORGANIZER / ATTENDEEmailto: addresses with CN, ROLE, PARTSTAT, RSVP
TRANSPOPAQUE blocks free/busy time, TRANSPARENT does not
VALARMreminder: ACTION + TRIGGER (e.g. -PT10M)
MIMEtext/calendar; method=REQUEST for invites (iMIP, RFC 6047)
Extensions.ics; .ifb free/busy; webcal:// for subscriptions
Magic“BEGIN:VCALENDAR” as the first line
EncodingUTF-8 by default; lines end CRLF; fold at 75 octets with CRLF + one space or tab
Text escaping\\ \; \, and \n inside TEXT values
RelativesjCal (JSON, RFC 7265), xCal (XML, RFC 6321), vCard (.vcf) shares the line syntax
New propertiesRFC 7986: COLOR, IMAGE, CONFERENCE, REFRESH-INTERVAL
ZonesVTIMEZONE carries rules, but readers mostly use IANA names and their own tzdata
1996vCalendar 1.0The versit Consortium publishes the format iCalendar grew from.
1998RFC 2445iCalendar, with iTIP (2446) and iMIP (2447) for scheduling.
2009RFC 5545The current core spec; iTIP updated as RFC 5546.
2010RFC 6047iMIP updated: how invites travel by email.
2014RFC 7265jCal: the same data as JSON.
2016RFC 7986New properties for colours, images and conference links.

Around dates and calendars