(Java)DateクラスとCalendarクラスのまとめ

Dateクラスの使い方

Date date1 = new Date();		//現在時刻
Date date2 = new Date(date1.getTime());	//1970年1月1日午前0時(GMT)から現在までの経過時間を指定=date1と同時刻
Date date3 = new Date(5000);		//1970年1月1日午前0時(GMT)から5000ミリ秒経過
System.out.println(date1);
System.out.println(date2);
System.out.println(date3);

出力

Wed Jun 19 03:42:49 JST 2013
Wed Jun 19 03:42:49 JST 2013
Thu Jan 01 09:00:05 JST 1970

二つのdateを比較する関数なども用意されています。
引数ありコンストラクタは経過時間指定なのでちょっと使い勝手悪そう… setTime関数も同じく。
なお出力はSimpleDateFormatクラスを用いることで好きに改変出来ます。 
参考http://www.javaroad.jp/java_date3.htm


Calendarクラスの使い方

Calendar cal = Calendar.getInstance();
System.out.println(cal)

タイムゾーンロケールを指定することも出来ます。
で出力はというと…

java.util.GregorianCalendar[time=1371582720293,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=32400000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=5,WEEK_OF_YEAR=25,WEEK_OF_MONTH=4,DAY_OF_MONTH=19,DAY_OF_YEAR=170,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=4,HOUR_OF_DAY=4,MINUTE=12,SECOND=0,MILLISECOND=293,ZONE_OFFSET=32400000,DST_OFFSET=0]

(;・∀・)… なんとなくわかるけど果てしなく見辛い。
なので

Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());

と書き、getTime関数を使ってCalendar型からDate型に変換することで

Wed Jun 19 04:20:13 JST 2013

という出力を得ることが出来ます。 (…Calendar#toString()何のためにあるんだろう。)

CalendarはDateとは違い、細かくset,getできます。

Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
cal.set(Calendar.MINUTE, 18);	//分だけを指定する
System.out.println(cal.getTime());
cal.set(2012, 7, 22, 18, 36, 42);	//全部指定する(月は0~11なので注意)
System.out.println(cal.getTime());
	
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.SECOND));

出力

Wed Jun 19 05:26:33 JST 2013
Wed Jun 19 05:18:33 JST 2013
Wed Aug 22 18:36:42 JST 2012
22
42

加減算もできます。月を2ずつ増やすとこんな感じ。

Calendar cal = Calendar.getInstance();
for(int i=0;i<5;i++){
	System.out.println(cal.getTime());
	cal.add(Calendar.MONTH, 2);
}

出力

Wed Jun 19 04:57:49 JST 2013
Mon Aug 19 04:57:49 JST 2013
Sat Oct 19 04:57:49 JST 2013
Thu Dec 19 04:57:49 JST 2013
Wed Feb 19 04:57:49 JST 2014

年と月が自動で修正されていることがわかります。

Calendar型⇔Date型

・Calendar⇒Date
こっちは上でも使いました。

Calendar cal = Calendar.getInstance();
Date date = cal.getTime();

・Date⇒Calendar

Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);