「日付と時刻」をデータとして扱う方法です.Date クラスのオブジェクトは生成時にその時点の日付&時刻を取得しますが,ここで紹介する Calendar クラスのオブジェクトは日付&時刻を1つのデータと見て日数計算(「〜日あと」とか「〜週間前」,「〜時間後」とかの計算)をするためのものです.
下のサンプルプログラム “CalendarTest1.java” では最初に「2014/01/01,00:00:00」の日付をデータとして用意して「〜日後」「〜時間後」のような計算をしている例です.
set() メソッドで日付や時刻を設定し,add() メソッドで日数や時間を加算し,get() メソッドで日付や時刻を取り出します.
import java.util.*;
class CalendarTest1 {
public static void main( String argv[] ) {
int y, m, d, wd2, h, min, sec;
Calendar cal = Calendar.getInstance();
String wd[] = { "日", "月", "火", "水", "木", "金", "土" };
/* 2014/01/01, 00:00:00 */
cal.set(Calendar.YEAR,2012);
cal.set(Calendar.MONTH,1-1);
cal.set(Calendar.DATE,1);
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
/* after 86,400 seconds */
cal.add(Calendar.SECOND,86400);
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH) + 1;
d = cal.get(Calendar.DATE);
wd2 = cal.get(Calendar.DAY_OF_WEEK) - 1;
System.out.printf("%d/%02d/%02d(%s)\n",y,m,d,wd[wd2]);
/* after 12 Months */
cal.add(Calendar.MONTH,12);
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH) + 1;
d = cal.get(Calendar.DATE);
wd2 = cal.get(Calendar.DAY_OF_WEEK) - 1;
System.out.printf("%d/%02d/%02d(%s)\n",y,m,d,wd[wd2]);
/* after 28 Days */
cal.add(Calendar.DATE,28);
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH) + 1;
d = cal.get(Calendar.DATE);
wd2 = cal.get(Calendar.DAY_OF_WEEK) - 1;
System.out.printf("%d/%02d/%02d(%s)\n",y,m,d,wd[wd2]);
/* after 24 Hours */
cal.add(Calendar.HOUR_OF_DAY,24);
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH) + 1;
d = cal.get(Calendar.DATE);
wd2 = cal.get(Calendar.DAY_OF_WEEK) - 1;
System.out.printf("%d/%02d/%02d(%s)\n",y,m,d,wd[wd2]);
/* after 31,536,000 Seconds */
cal.add(Calendar.SECOND,31536000);
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH) + 1;
d = cal.get(Calendar.DATE);
wd2 = cal.get(Calendar.DAY_OF_WEEK) - 1;
System.out.printf("%d/%02d/%02d(%s)\n",y,m,d,wd[wd2]);
}
}
このプログラムを実行すると,次のような内容が表示されます.
2012/01/02(月)
2013/01/02(水)
2013/01/30(水)
2013/01/31(木)
2014/01/31(金)