クラス 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()