icsファイルの構造・構文

iCalやiCalendarで使われるスケジュールを記述したicsファイルの構文が気になったので実際に取得して調べました。

〜構造〜

BEGIN:VCALENDAR
> 
> バージョン、名前などの情報
> 
> BEGIN:VTIMEZONE
> > タイムゾーンについて
> END:VTIMEZONE
> 
> BEGIN:VEVENT
> > イベント情報。以下これがn個続く
> END:VEVENT
> 
> ~~~~~~~~~~~
> 
END:VCALENDAR

HTMLみたいな入れ子構造になっています。見えやすいように>を入れましたが、実際は>はありません。

〜構文〜

いくつか例を列挙します。

  • 一回きりのイベント
BEGIN:VEVENT
DTSTART:20160921T000000Z
DTEND:20160922T090000Z
DTSTAMP:20161129T080256Z
UID:xxx@google.com
CREATED:20160425T035113Z
DESCRIPTION:
LAST-MODIFIED:20160425T035113Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:
TRANSP:OPAQUE
END:VEVENT
  • 毎月23日を10月から4回繰り返す、ただし11月と12月は行わないイベント
BEGIN:VEVENT
DTSTART;TZID=Asia/Tokyo:20161023T100000    #開始時刻
DTEND;TZID=Asia/Tokyo:20161023T110000      #終了時刻
RRULE:FREQ=MONTHLY;COUNT=4;BYMONTHDAY=23   #繰り返し規則
EXDATE;TZID=Asia/Tokyo:20161123T100000     #11/23は除く
EXDATE;TZID=Asia/Tokyo:20161223T100000     #12/23は除く
DTSTAMP:20161129T070223Z                   #予定作成日?
UID:xxx@google.com                         #ID
CREATED:20161129T065911Z                   #予定作成日?
DESCRIPTION:
LAST-MODIFIED:20161129T070132Z
LOCATION:家                                #場所
SEQUENCE:1                                 #修正回数
STATUS:CONFIRMED
SUMMARY:毎月23日、4回繰り返し                  #イベント名
TRANSP:OPAQUE
END:VEVENT

DTSTAMPとCREATEDの違いは謎です。

  • アラームつきのイベント
BEGIN:VEVENT
*
*
*
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P1D
END:VALARM
END:VEVENT
  • 平日のみのイベント
BEGIN:VEVENT
DTSTART;TZID=Asia/Tokyo:20161129T170000
DTEND;TZID=Asia/Tokyo:20161129T180000
RRULE:FREQ=WEEKLY;COUNT=30;BYDAY=MO,TU,WE,TH,FR   #毎週曜日指定で繰り返し
DTSTAMP:20161129T075115Z
UID:xxx@google.com
CREATED:20161129T075046Z
DESCRIPTION:
LAST-MODIFIED:20161129T075046Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Hey日
TRANSP:OPAQUE
END:VEVENT

iCal4jのAPIについては

http://build.mnode.org/projects/ical4j/apidocs/

http://ical4j.github.io/docs/ical4j/api/2.0.0/

等で確認できそうです。下のURLの方がバージョンが新しいです。


繰り返しイベントで休日時に後日、前日にずらす処理は

http://otndnld.oracle.co.jp/document/products/cs10g/1012/doc_cd/collab.1012/B25658-01/migical.htm

を参考にして頑張りたい。