Skip to content
Toolcroft

Date & Time

ICS Calendar Event Generator

Create and download ICS (iCalendar) files for any event. Compatible with Google Calendar, Outlook, Apple Calendar, and any RFC 5545 calendar app.

iCalendar (.ics) format

The iCalendar standard (RFC 5545) defines a text format for calendar data supported by Google Calendar, Apple Calendar, Outlook, and virtually every other calendar application. Files use the .ics extension.

VEVENT structure

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//YourApp//EN
BEGIN:VEVENT
UID:unique-id@yourdomain.com
DTSTAMP:20240101T120000Z
DTSTART:20240615T090000Z
DTEND:20240615T100000Z
SUMMARY:Team Meeting
DESCRIPTION:Weekly sync
LOCATION:Conference Room A
END:VEVENT
END:VCALENDAR

iCalendar properties reference

PropertyDescriptionExample
DTSTARTEvent start date/time20240615T090000Z
DTENDEvent end date/time20240615T100000Z
SUMMARYEvent titleSUMMARY:Team Meeting
DESCRIPTIONDetailed description (use \n for line breaks)DESCRIPTION:Agenda item 1\nItem 2
LOCATIONLocation string or URLLOCATION:Conference Room A
RRULERecurrence ruleRRULE:FREQ=WEEKLY;BYDAY=MO
VALARMReminder componentTRIGGER:-PT15M (15 min before)
UIDUnique event identifierShould be globally unique

Recurring events (RRULE)

The RRULE property defines repeating patterns using a structured syntax:

  • RRULE:FREQ=DAILY;COUNT=5 - repeat daily for 5 occurrences
  • RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR - every Monday, Wednesday, Friday
  • RRULE:FREQ=MONTHLY;BYDAY=1MO - first Monday of each month
  • RRULE:FREQ=YEARLY;UNTIL=20261231T000000Z - annually until December 31, 2026

Timezone handling

Use the TZID parameter with a standard IANA timezone name rather than converting all times to UTC. This prevents Daylight Saving Time ambiguity:

DTSTART;TZID=America/New_York:20240615T090000

Using UTC (Z suffix) is simpler but means the event will shift by one hour in local time when DST transitions occur. TZID-based times always represent the correct local time regardless of clock changes.

Key date format

Dates use ISO 8601: YYYYMMDD for all-day events; YYYYMMDDTHHmmSSZ for timed events (Z = UTC). Omit Z and add a TZID for local time zones.