Calendarクラス の利用

Calenderクラスの利用

詳細は次のリンクで調べましょう。


今日の日付の情報を得るのにjava.util.Calendarクラスを利用します。
Calendar d = Calendar.getInstance();//現在の時間を取得
そして、d.get(フィールド定数)で各種情報が得られます。
フィールド定数は、Calendar.YEAR、Calendar.MONTH、Calendar.DATE などがります。
またd.getTimeInMillis()でエポックタイム(epoch time)が得られます。d.setTimeInMillis()で設定も可能です。
エポックタイムは1970年1月1日 00:00:00.000 GMT (グレゴリオ暦) からの時間を意味します。
この単位はミリ秒のlong値で、一回だけ乱数の変わり使うことができます。
1日の24時間をミリ単位のエポックタイムにすると1000×60秒60分×24時間=886400000秒になります。
以下で、各種使い方の例を示します。

誕生日(西暦,月,日)を入力すると、年齢が出力されます。
 (今日の日付も表示します。)

import java.io.*;//InputStreamReader,BufferedReader利用のため
import java.util.*; //Calendarクラス利用のため

public class Test {
	public static void main(String argv[]) throws Exception{
		InputStreamReader is = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(is);

		Calendar rightNow = Calendar.getInstance();//現在の時間を取得
		int rightYear = rightNow.get(Calendar.YEAR);
		int rightMonth = rightNow.get(Calendar.MONTH) + 1;// JANUARYが0なので調整
		int rightDate = rightNow.get(Calendar.DATE);
		
		System.out.print("誕生の西暦年>");
		int birthYear = Integer.parseInt(br.readLine());
		System.out.print("誕生の月(1-12)>");
		int birthMonth = Integer.parseInt(br.readLine());
		System.out.print("誕生の日(1-31)>");
		int birthDate = Integer.parseInt(br.readLine());
		
		int nen = rightYear - birthYear;
		if(rightMonth < birthMonth || rightMonth == birthMonth && rightDate < birthDate ){
			nen--;//この条件(月日)では、まだ生まれていない。
		}
		System.out.println("今日は、" + rightYear + "年" + rightMonth + "月" + rightDate + "日で");
		System.out.print(  "        " + birthYear + "年" + birthMonth + "月" + birthDate + "日生まれの人の");
		System.out.println("年齢は=" + nen + "才です");
	}
}

実行例を以下に示します

誕生の西暦年>1980
誕生の月(1-12)>5
誕生の日(1-31)>18
今日は、2005年6月17日で
        1980年5月18日生まれの人の年齢は=25才です

年と月を入力すると、その月の1日の曜日と日数を表示させる。

import java.io.*;//InputStreamReader,BufferedReader利用のため
import java.util.*; //Calendarクラス利用のため

public class Test
{
	public static void main(String argv[]) throws Exception
	{
		InputStreamReader is = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(is);

		System.out.println("曜日定数のデータを列挙");
		System.out.println("日:" + Calendar.SUNDAY);
		System.out.println("月:" + Calendar.MONDAY);
		System.out.println("火:" + Calendar.TUESDAY);
		System.out.println("水:" + Calendar.WEDNESDAY);
		System.out.println("木:" + Calendar.THURSDAY);
		System.out.println("金:" + Calendar.FRIDAY);
		System.out.println("土:" + Calendar.SATURDAY);
		System.out.println();

		String[] weekStr = { "NON", "日", "月", "火", "水", "木", "金", "土" };
		
		System.out.print(" 西暦年>");
		int yy = Integer.parseInt(br.readLine());
		System.out.print("月(1-12)>");
		int mm = Integer.parseInt(br.readLine());

		Calendar calendar1 = Calendar.getInstance();

		calendar1.set(yy, mm - 1, 1);//入力年月の一日のデータを設定
		
		int iweek = calendar1.get(Calendar.DAY_OF_WEEK);

		System.out.println(yy+"年"+mm+"月"+"1日の曜日=" + weekStr[iweek]);
		System.out.println("この月の日数=" + calendar1.getActualMaximum(Calendar.DATE));
	}
}

実行例を以下に示します

曜日定数のデータを列挙
日:1
月:2
火:3
水:4
木:5
金:6
土:7

 西暦年>2009
月(1-12)>2
2009年2月1日の曜日=日
この月の日数=28

 Dataクラス と、SimpleDateFormatクラス

CalendarオブジェクトのgetTime()メソッドで、Dataのオブジェクトが戻り値で得ることができます。
(setTimeメソッドで、Dataオブジェクトの設定可能です。)

Dataクラスは、そのコンストラクタで現在時間が記憶されるDataオブジェクトを生成できます。 そしてgetTimeメソッドで、1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数をlongで返します。 この時間は、エポックタイム(epoch time)と呼ばれますが、この時間でDataオブジェクトの 内部記憶情報を変更する場合は、setTimeメソッドを使います。
また、Dateオブジェクトを比較する after(Date when)、before(Date when)、 boolean equals(Object obj) が用意されています。
なお、Dateオブジェクトから表示に使うStringを取得する場合、SimpleDateFormatクラスを使います。 SimpleDateFormatは、コンストラクタで次のフォーマットを指定して生成し、 そのオブジェクトのformatメソッド引数でDateオブジェクトし、表示用の文字列を取得します。

文字説明
yyyy 年 1996
yy 年 96
G 紀元 AD
MM 月 July, Jul, 07
w 年における週 27
W 月における週 2
D 年における日 189
d 月における日 10
F 月における曜日 2
E 曜日 Tuesday, Tue
a 午前/午後 PM
H 一日における時(0?23) 0
k 一日における時(1?24) 24
K 午前/午後の時(0?11) 0
h 午前/午後の時(1?12) 12
m 分 30
s 秒 55
S ミリ秒 978
z タイムゾーン Pacific Standard Time, PST, GMT-08:00
Z タイムゾーン -0800
		Date d = new Date();//現在の時間を取得
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd a hh:mm:ss", Locale.US);
		String s=sdf.format(d);
		System.out.println(s);
		sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
		System.out.println(sdf.format(d));
2012/07/07 PM 10:05:22
2012年07月07日 22時05分22秒