Skip to content

Instantly share code, notes, and snippets.

@ulong32
Last active May 11, 2023 22:51
Show Gist options
  • Save ulong32/6d210fa82f0ee3feea70b643766b9ad3 to your computer and use it in GitHub Desktop.
Save ulong32/6d210fa82f0ee3feea70b643766b9ad3 to your computer and use it in GitHub Desktop.
iCalendar 仕様(抜粋)

iCalendar 仕様

iCalendarの仕様のうち、LiliesNoteで使用したものを抜粋する。

What is iCalendar?

iCalendar形式は、カレンダーのイベントを表示、共有するためのフォーマット。 RFC5545にて定義されている。

ファイルフォーマット

iCalendarファイルの拡張子は.ics。MIMEタイプはtext/calendarで、規定の文字コードはUTF-8

改行はCR+LF、一行は改行を除き75オクテット以内。

75オクテットを超える行に関しては、畳み込みを行う。

文字列を分割し、その文字列を改行し、先頭に半角スペースを入れる。

(しかし、最近のクライアントは一行が75オクテット以上でも正常に読み込みを行う。iOS/AndroidのカレンダーApp、Windowsのカレンダーにて確認。)

畳み込み処理を行う都合上、行の先頭に空白を入れてはいけない。

日付はYYYYMMDD、時刻はHHMMSSで記載する。繋げる場合はTで繋ぐ。

ファイル構造

全てのコンポーネントはBEGIN:コンポーネント名で始まり、END:コンポーネント名で終わる。

プロパティはプロパティ名:値のように記述する。

定義されていないプロパティは処理系によって無視される。これを利用してコメントを入れることも可能。

VCALENDAR

カレンダーコンポーネント。識別情報、タイムゾーンの定義や、イベントを入れるコンポーネント。

  • PRODID : 必須。識別情報を定義する。FPIに沿った記法が推奨。
  • CALSCALE : 暦の形式を指定する。GREGORIANのみ指定できる?
  • VERSION : iCalendarファイルのバージョン。RFC5545では2.0が指定されている。

VEVENT

イベントコンポーネント。イベントの情報を入れる。

  • DTSTART : イベントの開始時刻。DTSTART;VALUE=DATE:日付と記述すると、日付のみの指定ができる。
  • DTEND : イベントの終了時刻。DTSTARTと同じように日付のみの指定が可能。終日のイベントにしたい場合、DTSTARTの1日後を指定すれば良い。
  • RRULE : 繰り返しルール。毎年の繰り返しの場合、RRULE;FREQ=YEARLYと指定する。
  • TRANSP : イベントの時間の状態。OPAQUEの場合には予定あり、TRANSPARENTの場合には空き時間となる。
  • UID : 全世界でユニークなID。RFC2445では、 RFC822addr-spec(メールアドレスなどの形式)が推奨されていたが、 RFC5545ではUUIDの使用が推奨されている。
  • DTSTAMP : イベントが作成された日時。
  • SUMMARY : イベントの件名。
  • DESCRIPTION : イベントの説明。
  • URL : イベントのURL。URL;VALUE=URI:の形で指定する。

BEGIN:VCALENDAR
PRODID:-//Organization/Author//NONSGML Software//JA
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTART;VALUE=DATE:20230619
DTEND;VALUE=DATE:20230620
DTSTAMP:20230510T150000
RRULE;FREQ=YEARLY
TRANSP:TRANSPARENT
SUMMARY:Hitotsuyanagi Riri's birthday
DESCRIPTION:It is the birthday of Hitotsuyanagi Riri, who belongs to LG Radgrid.
END:VEVENT
END:VCALENDAR

参考

iCalendar 仕様 - asahi-net.or.jp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment