少し前まで、
iCalendarから必要な情報を解析して出力する必要がありました。 ハード検索の後、
iCal4Jライブラリに
出会いました。 その機能を見て、私はこれが私が必要なものであることに気づきました。 それを実践してみましょう。
カレンダーの準備
Googleカレンダーでは、30分から6時間続くさまざまなイベントで構成される小さなカレンダーを作成しました。 次に、iCalカレンダーをラップトップにダウンロードしました。 誰も知らない場合、これは次のように行われます。Googleカレンダー設定に移動し、「閉じたカレンダーのアドレス」セクションの緑色のボタン「ICAL」をクリックします。 それだけです、カレンダーはデバイスにアップロードされます。
Javaの準備
次のステップは、ライブラリをダウンロードしてプロジェクトに接続することでした。 展開して、開発環境に* .jarライブラリファイルのあるフォルダーを示しました。 また、ダウンロードしたカレンダーファイルがプロジェクトフォルダーにコピーされました。 すべてのコードを書く準備ができました!
カレンダーをダウンロード
カレンダーをロードするための2つのオプションがあります-ファイルから、カレンダーの内容を含む行を解析します。 最初の方法を選択します(2番目の方法は大きく異なりません)。
すべてのイベントの結論
次に、カレンダーからすべてのイベントをどこかに(少なくともコンソールに)取得しようとします。
最初の行、つまり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:イベント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);
カレンダーに新しいイベントを追加します
しかし、イベントの作成では、すべてがそれほど単純ではありませんが、それを把握すれば、すべてが十分に迅速に進みます。
カレンダーをファイルに保存する
カレンダーを操作したので、必ず保存する必要があります。 ファイルに保存することをお勧めします。
FileOutputStream fout = new FileOutputStream("calendar.ics"); CalendarOutputter out = new CalendarOutputter(); out.output(calendar, fout);
おわりに
iCal4jライブラリの基本機能を調べました。 もちろん、その機能はカレンダーを解析してイベントを作成するだけに限定されません。 このライブラリを使用すると、ファイルをイベントに添付したり、座標で位置を指定してイベントを作成したり、ゲストリストを作成したりすることもできます。 さらに、Androidアプリケーションの開発でライブラリを使用できます。
参照:
- iCalendarの説明
- ICal4jドキュメント
- iCal4j Wiki(ライブラリはこちらからダウンロードすることもできます)