「日付と時刻」をデータとして扱う方法です.Date クラスのオブジェクトは生成時にその時点の日付&時刻を取得しますが,ここで紹介する Calendar クラスのオブジェクトは日付&時刻を1つのデータと見て日数計算(「〜日あと」とか「〜週間前」,「〜時間後」とかの計算)をするためのものです.
下のサンプルプログラム “CalendarTest1.java” では最初に「2014/01/01,00:00:00」の日付をデータとして用意して「〜日後」「〜時間後」のような計算をしている例です.
set() メソッドで日付や時刻を設定し,add() メソッドで日数や時間を加算し,get() メソッドで日付や時刻を取り出します.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 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(金) |