クラス Calendar の使い方

    • 抽象クラスだってことを意識する

import java.util.Calendar;

public class CalendarTest {
  public static void main(String[] args) {


    // Calendar calendar = new Calendar();
    // ↑のコードはコンパイルエラーになる
    // ⇒カレンダークラスは抽象クラスなのでインスタンスを作成できない
    // ⇒(無論抽象クラス型の変数は宣言できる)
    // だからスタティクメソッドgetInstance()を使ってインスタンスを取得する
    Calendar c = Calendar.getInstance();

    // 日時を2004年1月7日15時40分に設定する(月は0から始まっている)
    c.set(2004, 0, 7, 15, 40);


    // 時刻の値をミリ秒に設定する
    long day1 = c.getTimeInMillis();


    // day1の間に1時間を加える(ミリ秒換算)
    day1 += 1000 * 60 * 60;


    // 時刻を更新する
    c.setTimeInMillis(day1);
    System.out.println("new hour = " + c.get(c.HOUR_OF_DAY));


    // 日付に35を加えて2月にする
    c.add(c.DATE, 35);
    System.out.println("add 35 days ⇒ " + c.getTime());


    // 同じく日付に35を加えるが、roll()を使った場合は当該月のままロール(回転する)
    c.roll(c.DATE, 35);
    System.out.println("roll 35 days ⇒ " + c.getTime());


    // インクリメントではなく日付を1にする
    c.set(c.DATE, 1);
    System.out.println("set to 1 ⇒ " + c.getTime());
  }
}

実行結果

new hour = 16
add 35 days ⇒ Wed Feb 11 16:40:11 JST 2004
roll 35 days ⇒ Tue Feb 17 16:40:11 JST 2004
set to 1 ⇒ Sun Feb 01 16:40:11 JST 2004

じゃあCalendarクラスの変数には何が入ることになるのか?

インスタンスが作成できなくても、そのスタティクメソッドを呼出すことはできる。
 ⇒スタティクメソッドは特定のインスタンス名じゃなくて、クラス名を使用して呼出す。

getInstace()を呼出すとサブクラスのインスタンスが取得できる。

Calendarのサブクラスのインスタンス = Calendar型の変数に代入は出来るってこと。同時にCalendarクラスのメソッドは全て備えている。

日付・時刻はインクリメントできる

時間を進めたり、10年前に戻したりも簡単

日付・時刻はミリ秒単位に出来る

ミリ秒換算することで、2つの時点の間の経過時間を正確に計算できる。またある時点から28時間45分14秒加えたりといった計算も容易

Calendar APIの主要機能

  • add(int field, int amount)

  指定のフィールドの値をインクリメント、デクリメント

  • get(int field)

  指定のフィールドの値を戻す

  • getInstance()

  Calendarのサブクラスのインスタンスを戻す

  • getTimeInmillis()

  時刻をミリ秒単位で戻す(long型)

  • roll(int field, boolean up)

  上位のフィールドの値に変更を加えずに、指定のフィールをの値をインクリメント、デクリメントする。
   ⇒インクリメントしても値が繰り上がらない。

  • set(int field, int value)

  指定のフィールドの値を設定する

  • set(year, month, day, hour, minite)

  ☆引数の値は全てint型
  年、月、日、時、秒のフィールドの値を設定する。
  set()の引数には他にもたくさんバリエーションがあるけど、これがいちばんよく使われている。

  • setTimeInMillis(long millis)

  時刻をミリ秒単位で(long型)で設定する。

覚えておくこと

Calendarクラスを使うときは、まずCalendarクラスのサブクラスのインスタンスを取得する = getInstance()