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
を参考にして頑張りたい。