Открыть сервис

iCalendar

iCalendar — это стандартный формат обмена данными календаря и планирования, определённый в RFC 5545 (ранее RFC 2445). Он представляет собой текстовый файл с расширением .ics (реже .ifb для информации о занятости), который позволяет пользователям создавать, обмениваться и синхронизировать события, задачи, встречи и заметки между различными приложениями и сервисами, такими как Google Календарь, Microsoft Outlook, Apple Календарь и Mozilla Thunderbird. Формат является открытым, не привязанным к конкретному производителю, и широко используется для распространения расписаний, напоминаний и информации о доступности.

История

Разработка iCalendar началась в конце 1990-х годов как попытка заменить устаревший формат vCalendar, который был создан компанией Internet Mail Consortium (IMC) в 1996 году. vCalendar, в свою очередь, базировался на более раннем формате, используемом в Apple Newton. Основной проблемой vCalendar была его ограниченная поддержка повторяющихся событий и сложность интеграции с электронной почтой.

В 1998 году рабочая группа IETF (Internet Engineering Task Force) начала работу над новым стандартом, который получил название iCalendar. Первая версия спецификации была опубликована в ноябре 1998 года как RFC 2445. Она определила основные элементы: события (VEVENT), задачи (VTODO), заметки (VJOURNAL) и информацию о свободном/занятом времени (VFREEBUSY). В 2009 году была выпущена обновлённая версия — RFC 5545, которая уточнила синтаксис, добавила поддержку новых свойств (например, ATTACH для вложений) и исправила ошибки предыдущей версии. Позднее вышли дополнения, такие как RFC 6868 (о кодировании символов) и RFC 7986 (о новых свойствах для календарей).

Формат и структура

Файл iCalendar представляет собой текстовый документ в кодировке UTF-8, использующий синтаксис, похожий на MIME (Multipurpose Internet Mail Extensions). Каждый файл начинается с обязательной строки BEGIN:VCALENDAR и заканчивается END:VCALENDAR. Внутри содержится один или несколько компонентов, каждый из которых также обрамлён ключевыми словами BEGIN и END.

Основные компоненты

  • VEVENTсобытие, имеющее дату, время и продолжительность. Пример: встреча, конференция, день рождения.
  • VTODO — задача с указанием срока выполнения (DUE) или без него. Может содержать статус (NEEDS-ACTION, COMPLETED, IN-PROCESS).
  • VJOURNALзапись в дневнике, не привязанная к конкретному времени. Используется реже остальных.
  • VFREEBUSYинформация о занятости пользователя в определённый период. Применяется для планирования встреч.
  • VTIMEZONE — описание часового пояса, необходимое для корректного отображения времени в разных регионах.

Ключевые свойства

Каждый компонент содержит набор свойств, заданных в формате ИМЯ:ЗНАЧЕНИЕ. Основные из них:

  • DTSTART — дата и время начала.
  • DTEND — дата и время окончания (для событий).
  • DURATION — продолжительность (альтернатива DTEND).
  • SUMMARY — краткое описание (заголовок).
  • DESCRIPTION — подробное описание.
  • LOCATION — место проведения.
  • UIDуникальный идентификатор события (обязателен для синхронизации).
  • RRULE — правило повторения (например, ежедневно, каждую вторую неделю).
  • ATTENDEE — участник события с указанием его роли (CHAIR, REQ-PARTICIPANT, OPT-PARTICIPANT) и статуса (ACCEPTED, DECLINED, TENTATIVE).
  • ORGANIZER — организатор события.
  • STATUS — статус (CONFIRMED, CANCELLED, TENTATIVE).

Пример простого файла

`` BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp//Example Calendar//EN BEGIN:VEVENT UID:20240101T120000Z-123456@example.com DTSTART:20240115T090000Z DTEND:20240115T100000Z SUMMARY:Совещание по проекту DESCRIPTION:Обсуждение планов на квартал LOCATION:Переговорная 3 END:VEVENT END:VCALENDAR ``

Классификация и версии

Формат iCalendar существует в нескольких версиях:

  • 1.0 — устаревшая версия, соответствующая vCalendar, практически не используется.
  • 2.0 — текущая версия, определённая в RFC 5545. Поддерживается всеми современными календарными приложениями.

Также существуют расширения стандарта, например:

  • CalDAV (RFC 4791) — протокол для удалённого управления календарями через HTTP, использующий iCalendar в качестве формата данных.
  • jCal (RFC 7265) — JSON-представление iCalendar для упрощения обработки в веб-приложениях.
  • xCal (RFC 6321) — XML-представление iCalendar.

Применение

iCalendar широко используется в следующих сценариях:

  • Обмен расписаниями: пользователи могут отправлять приглашения на встречи по электронной почте в виде вложений .ics. Получатель может импортировать событие в свой календарь одним кликом.
  • Синхронизация: сервисы, такие как Google Календарь, Яндекс Календарь и Outlook, поддерживают импорт и экспорт календарей в формате iCalendar, что позволяет переносить данные между платформами.
  • Публикация расписаний: многие организации (университеты, спортивные клубы, транспортные компании) публикуют свои календари в виде URL-ссылок на .ics-файлы, которые пользователи могут подписаться на них в своих приложениях.
  • Планирование встреч: системы, такие как Doodle или Calendly, генерируют iCalendar-файлы для подтверждения записи на встречу.
  • Автоматизация: скрипты и программы могут генерировать .ics-файлы на основе данных из баз данных, API или веб-форм.

Поддержка в программном обеспечении

Формат iCalendar поддерживается практически всеми популярными календарными приложениями:

  • Google Календарь — полная поддержка импорта, экспорта и подписки на iCalendar-каналы.
  • Microsoft Outlook — поддержка iCalendar начиная с версии 2007, включая отправку приглашений и публикацию календарей.
  • Apple Календарь (ранее iCal) — нативная поддержка формата, включая подписку на удалённые календари.
  • Mozilla Thunderbird с расширением Lightning — поддержка iCalendar для создания и синхронизации событий.
  • Nextcloud и ownCloud — серверные решения для совместной работы, использующие CalDAV и iCalendar.
  • KDE Kontact и GNOME Evolution — открытые клиенты для Linux с поддержкой формата.

Ограничения и критика

Несмотря на широкое распространение, iCalendar имеет ряд недостатков:

  • Сложность обработки повторяющихся событий: правила RRULE могут быть громоздкими и не всегда корректно интерпретируются разными приложениями. Например, исключения из повторений (EXDATE) и модификации отдельных экземпляров (RECURRENCE-ID) часто приводят к ошибкам синхронизации.
  • Отсутствие поддержки вложений: хотя RFC 5545 включает свойство ATTACH, многие приложения не поддерживают вложения в iCalendar, ограничиваясь только ссылками.
  • Проблемы с часовыми поясами: неправильное указание часового пояса или его отсутствие может привести к отображению события в неверное время, особенно при пересылке между разными регионами.
  • Ограниченная поддержка задач: компонент VTODO реализован не во всех приложениях, и синхронизация задач между разными сервисами часто работает некорректно.
  • Размер файла: при большом количестве событий или повторений файл может стать громоздким, что затрудняет его передачу по электронной почте.

Интересные факты

  • Формат iCalendar используется не только для календарей, но и для планирования телевизионных передач (например, в стандарте TV-Anytime).
  • Спецификация iCalendar включает поддержку так называемых «прозрачных» событий (TRANSP:TRANSPARENT), которые не блокируют время в календаре — это удобно для напоминаний или дней рождения.
  • На основе iCalendar создан формат hCalendar — микроформат для встраивания календарной информации в HTML-страницы.

Источники

  • RFC 5545 — Internet Calendaring and Scheduling Core Object Specification (iCalendar)
  • RFC 2445 — Internet Calendaring and Scheduling Core Object Specification (iCalendar) (устаревшая версия)
  • RFC 4791 — Calendaring Extensions to WebDAV (CalDAV)
  • RFC 6868 — Parameter Value Encoding in iCalendar and vCard
  • RFC 7986 — New Properties for iCalendar
  • Документация Google Календаря по импорту и экспорту iCalendar
  • Документация Microsoft Outlook по формату iCalendar

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →