Calendar interoperability

Single-event ICS files: UTC, all-day dates and safe text

An ICS file describes an event; it does not send an invitation or prove that a calendar app accepted it correctly.

Content updated: · Maintainer and corrections

Use an unambiguous event interval

Timed events in this generator use UTC with a Z suffix. Convert a local appointment to a known instant first; do not rename an ambiguous local time UTC. All-day events use dates rather than midnight timestamps.

DTEND is exclusive. An all-day event on October 7 ends on October 8; that does not make it a two-day event. Preview the receiving app after import, especially when crossing time zones or using all-day dates.

Escape content and fold bytes, not characters

iCalendar text needs escaping for backslashes, commas, semicolons and line breaks. Content-line boundaries use CRLF. The tool folds lines to at most 75 UTF-8 octets, including a continuation's leading space, without splitting a multi-byte character.

Use a fresh event identifier for a new event and inspect copied or downloaded content before sharing. This tool produces one event only: no recurrence, TZID definitions, attendees, organizer, invitation delivery or synchronization. The import app remains responsible for presentation and its own update behavior.

DTSTART;VALUE=DATE:20261007
DTEND;VALUE=DATE:20261008
→ One all-day event on October 7
DTSTART:20261007T010000Z
→ October 7, 09:00 in Asia/Taipei

Data provenance

Sources