カレンダーの準備
Googleカレンダーでは、30分から6時間続くさまざまなイベントで構成される小さなカレンダーを作成しました。 次に、iCalカレンダーをラップトップにダウンロードしました。 誰も知らない場合、これは次のように行われます。Googleカレンダー設定に移動し、「閉じたカレンダーのアドレス」セクションの緑色のボタン「ICAL」をクリックします。 それだけです、カレンダーはデバイスにアップロードされます。
Javaの準備
次のステップは、ライブラリをダウンロードしてプロジェクトに接続することでした。 展開して、開発環境に* .jarライブラリファイルのあるフォルダーを示しました。 また、ダウンロードしたカレンダーファイルがプロジェクトフォルダーにコピーされました。 すべてのコードを書く準備ができました!
カレンダーをダウンロード
カレンダーをロードするための2つのオプションがあります-ファイルから、カレンダーの内容を含む行を解析します。 最初の方法を選択します(2番目の方法は大きく異なりません)。
// FileInputStream fin = new FileInputStream("calendar.ics"); // Calendar CalendarBuilder builder = new CalendarBuilder(); Calendar calendar = builder.build(fin);
すべてのイベントの結論
次に、カレンダーからすべてのイベントをどこかに(少なくともコンソールに)取得しようとします。
// ComponentList listEvent = calendar.getComponents(Component.VEVENT); for (Object elem : listEvent) { // , listEvent Object VEvent event = (VEvent) elem; // // getValue() , . getName() toString() DESCRIPTION String description = event.getDescription().getValue(); // String title = event.getSummary().getValue(); System.out.println(title + " : " + description); }
最初の行、つまりComponent.VEVENTに注意する価値があります。 したがって、正確にカレンダーイベントを受信することを示します。 カレンダーから抽出するものを明示的に指定しない場合、To-Doコンポーネント(VTODO)、メモ(VJOURNAL)、およびVFREEBUSY、VALARM、VTIMEZONEなどの他のコンポーネントも含むリストを取得します。
フィルターを適用する
私の場合、特定の期間内の要素を表示するために、フィルターを適用できます。
java.util.Calendar today = java.util.Calendar.getInstance(); today.set(java.util.Calendar.HOUR_OF_DAY, 0); today.clear(java.util.Calendar.MINUTE); today.clear(java.util.Calendar.SECOND); // 1 Period period = new Period(new DateTime(today.getTime()), new Dur(1, 0, 0, 0)); // Filter filter = new Filter(new PeriodRule(period)); // List eventsToday = filter.filter(calendar.getComponents(Component.VEVENT)); // , eventsToday ,
執筆時点で、そのような記録は私のカレンダーに保存されていました(「タイトル」:「説明」[「開始時間」]の形式):
イベント1:イベント1-11月1日[2013年11月7日13:00:00 GMT]
イベント5:イベント5-11月12日[2013年11月12日12:00:00 GMT]
イベント3:イベント3-11月10日[2013年11月10日19:30:00 GMT]
イベント2:イベント2-11月9日[2013年11月9日08:30:00 GMT]
イベント4:イベント4-11月11日[2013年11月11日08:00:00 GMT]
イベント6:イベント6-11月13日[2013年11月13日09:30:00 GMT]
予定されたイベントの結論にフィルターを適用した後(11月11日)、イベント4のみを受信しました:
イベント4:イベント4-11月11日[2013年11月11日08:00:00 GMT]
期間を3日間に増やす...
Period period = new Period(new DateTime(today.getTime()), new Dur(3, 0, 0, 0));
...私はこの写真を手に入れました:
イベント5:イベント5-11月12日[2013年11月12日12:00:00 GMT]
イベント4:イベント4-11月11日[2013年11月11日08:00:00 GMT]
イベント6:イベント6-11月13日[2013年11月13日09:30:00 GMT]
空のカレンダーを作成する
iCal4jは、カレンダーを最初から作成することもサポートしています。 ここではすべてが簡単です。 カレンダーオブジェクトを作成し、必要なフィールドを追加します。
Calendar calendar = new Calendar(); calendar.getProperties().add(new ProdId("-//habrahabr")); calendar.getProperties().add(Version.VERSION_2_0); calendar.getProperties().add(CalScale.GREGORIAN);
カレンダーに新しいイベントを追加します
しかし、イベントの作成では、すべてがそれほど単純ではありませんが、それを把握すれば、すべてが十分に迅速に進みます。
// TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry(); TimeZone timezone = registry.getTimeZone("Europe/Minsk"); VTimeZone tz = timezone.getVTimeZone(); // 10 18:00 java.util.Calendar startDate = new GregorianCalendar(); startDate.setTimeZone(timezone); startDate.set(java.util.Calendar.MONTH, java.util.Calendar.NOVEMBER); startDate.set(java.util.Calendar.DAY_OF_MONTH, 10); startDate.set(java.util.Calendar.YEAR, 2013); startDate.set(java.util.Calendar.HOUR_OF_DAY, 18); startDate.set(java.util.Calendar.MINUTE, 0); startDate.set(java.util.Calendar.SECOND, 0); // 20:00 java.util.Calendar endDate = new GregorianCalendar(); endDate.setTimeZone(timezone); endDate.set(java.util.Calendar.MONTH, java.util.Calendar.NOVEMBER); endDate.set(java.util.Calendar.DAY_OF_MONTH, 10); endDate.set(java.util.Calendar.YEAR, 2013); endDate.set(java.util.Calendar.HOUR_OF_DAY, 20); endDate.set(java.util.Calendar.MINUTE, 0); endDate.set(java.util.Calendar.SECOND, 0); // String eventName = "- "; DateTime start = new DateTime(startDate.getTime()); DateTime end = new DateTime(endDate.getTime()); VEvent meeting = new VEvent(start, end, eventName); // meeting.getProperties().add(tz.getTimeZoneId()); // Calendar icsCalendar = new Calendar(); icsCalendar.getProperties().add(new ProdId("-//habrahabr")); icsCalendar.getProperties().add(CalScale.GREGORIAN); // icsCalendar.getComponents().add(meeting);
カレンダーをファイルに保存する
カレンダーを操作したので、必ず保存する必要があります。 ファイルに保存することをお勧めします。
FileOutputStream fout = new FileOutputStream("calendar.ics"); CalendarOutputter out = new CalendarOutputter(); out.output(calendar, fout);
おわりに
iCal4jライブラリの基本機能を調べました。 もちろん、その機能はカレンダーを解析してイベントを作成するだけに限定されません。 このライブラリを使用すると、ファイルをイベントに添付したり、座標で位置を指定してイベントを作成したり、ゲストリストを作成したりすることもできます。 さらに、Androidアプリケーションの開発でライブラリを使用できます。
参照: