libro
www.tuyano.com
初心者のためのJava SEプログラミング入門

日時の値とカレンダー (1/6)

作成:2012-07-22 19:33
更新:2012-07-22 19:33

■DateとCalendarクラスについて

日時というのは、けっこう扱いが面倒くさい値です。単純に日時を表示するだけなら別ですが、例えば「○○月○○日から△△月△△日まで何日あるか?」なんて計算しようとすると、相当に面倒ですね。

こういう面倒なものは、クラスとして定義して、メソッドを呼び出せばささっと何でもできるようにするのがJava流です。というわけで、日時などの時間に関する値は「Date」というクラスとして用意されることになりました。これは、java.utilパッケージに用意されているクラスです。このインスタンスを用意し、必要に応じてメソッドを呼び出して日時を扱うのです。
Date 変数 = new Date();
例えば、現在の日時を示すDateインスタンスを作成するには、こんな具合にすれば簡単に作成できます。――が! 実は「こんなやり方は、今はしてはいけない」のです。ここがJavaの日時のややこしいところなんですが……。

Dateには、日時を正確に表すために必要な情報が欠けているのです。それは、どこの日時か(地域によって時間は違いますからね)、あるいはどういう暦で表現した年月日か(西洋暦とイスラム暦では年も1年の始まりも違います)、といった情報です。Dateは、年月日時分秒といった日時の基本情報は持っているのですが、こうした幾つかの付随する情報がないため、正確な表現はできないのです。

そこで用意されたのが、やはりjava.utilパッケージに用意されている「Calendar」というクラスです。これは文字通りカレンダー情報を管理するためのクラスです。これを利用し、特定の暦システムに基づいて日時の値を取り出し処理するわけです。
Calendar 変数 = Calendar.getInstance();
カレンダーの値は、このようにCalendarクラスの「getInstance」というクラスメソッドを呼び出して取得します。これは最適な暦システムのCalendarインスタンスを作成して返す働きを持ちます。――というと、Javaの中にさくたんの暦システムが用意されているように思いますが、デフォルトで用意されているのは、現在の西洋暦(グレゴリオ暦)のみです。これは「GregorianCalendar」というCalendarクラスのサブクラスとして用意されています。ですから、当面は「getInstanceではGregorianCalendarが得られる」と思ってしまってよいでしょう。

GregorianCalendarは、西暦による年月日を直接指定してCalendarを作るようなときに用いられます。以下のようにしてインスタンスを作成することができます。
Calendar 変数 = new GregorianCalendar( 年, 月, 日 );
Calendar 変数 = new GregorianCalendar( 年, 月, 日, 時, 分 );
Calendar 変数 = new GregorianCalendar( 年, 月, 日, 時, 分, 秒 );
こんな具合に、年月日時分秒の値をint値として引数に指定します。省略された項目は自動的にゼロに設定されます。

Calendarクラスは、実は自身の中に「Date」オブジェクトを持っています。つまり、カレンダー関係の情報は自分の中にあるので、そのカレンダーにしたがって日時の値であるDateを中に作成して利用しているのですね。このCalendar内にあるDateは簡単に取り出せます。
Date 変数 = 《Calendar》.getTime();
こんな感じです。Calendarによって決まった暦にあわせて日時が用意されていますから、ここから取り出されたDateは、そのカレンダーで正しい値のはずですから安心して利用できますね。

下に簡単な利用例を挙げておきましょう。実行すると、現在の日時がコンソールに出力されます。ここではまずCalendarインスタンスを取得し、そこからDateを取り出し、これをprintlnしています。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro;

import java.util.Calendar;
import java.util.Date;

public class TestApp {

	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		Date date = cal.getTime();
		System.out.println(date);
	}

}

※関連コンテンツ

「初心者のためのJava SEプログラミング入門」に戻る