目次へ

8. 日時とその表現/タイムゾーン

この章では日時の取扱とその表現、およびタイムゾーンについて説明します。

8.1. カレンダー

日時の計算、および取得を行う場合には、java.util.Calendarクラスを使用します。Calendarは特定の日時情報を保持するクラスで、日時計算のためのメソッドも提供しています。ただしCalendarは抽象クラスなので、実際にはその実装クラスであるjava.util.GregorianCalendarを使用します。GregorianCalendarは世界のほとんどの地域で使用されている、グレゴリオ暦で日時を管理するクラスです。Calendarを取得するためには、CalendarのgetInstanceクラスメソッドか、GregorianCalendarのコンストラクタで作成します。

Calendar cal = Calendar.getInstance();
Calendar cal = new GregorianCalendar(2002, 4, 1);

CalendarのgetInstanceは現在時刻で初期化されたカレンダーを返します。GregorianCalendarはコンストラクタの引数で指定した日時で初期化されたカレンダーを返します。引数の無いコンストラクタを使用した場合には、現在時刻で初期化されたカレンダーを返します。

特定のフィールド(年・月・日など)の値を取得したい場合には、「get」メソッドを使用します。getメソッドの引数は1つで取得するフィールドを指定します。引数の値には、Calendarクラスで定義されているクラス変数を用います。

int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);

フィールドを指定する上で使用する、主要なクラス変数を以下にまとめます。

ERA ユリウス暦の年代(AD, BC)
YEAR
MONTH 月。最初の月は0となります。
DATE, DAY_OF_MONTH 現在の月の何日目かを表します。
WEEK_OF_MONTH 現在の月の何週目かを表します。
DAY_OF_WEEK 現在の週の何日目かを表します。
AM_PM 午前午後を表します。
HOUR 午前または午後の何時かを表します。
HOUR_OF_DAY 24時制で何時かを表します。
MINUTE 何分かを表します。
SECOND 何秒かを表します。

Calendarには、それぞれの月を表すクラス変数JANUARY, FEBUARY...や、曜日SUNDAY, MONDAY...、午前・午後を表すクラス変数AM, PMも定義されています。

保持している日時を変化させたい場合には「add」「roll」「clear」「set」メソッドを使用します。addは特定のフィールドに対して、加算を行うメソッドです。負の数を指定すると、減算を意味します。

cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DATE, -1);

addメソッドは特定のフィールドの影響が、他のフィールドにも現れます。例えば「1月31日」に「1日」加えると、「2月1日」になります。それに対して、rollメソッドは特定のフィールドにしか変更を加えません。「1月31日」に「1日」加えると、「1月1日」となります。

cal.roll(Calendar.DATE, true);  // 引数がtrueなら1加算、falseなら1減算
cal.roll(Calendar.DATE, 2);

clearは特定のフィールドの値を0にするメソッドです。引数のないclearメソッドを使用すると、全フィールドが初期化されます。

cal.clear(Calendar.SECOND);

setは特定のフィールドの値を指定するメソッドです。決まったフィールドに対して値を設定するものもあります。

cal.set(Calendar.YEAR, 1);
cal.set(2002, 4, 1); // 年月日のフィールドに値を設定する

もしフィールドの最大値・最小値を越えて値を設定する(例えば日のフィールドに40)と、他のフィールドとあわせて補正が行われます。例えば「1月40日」は自動的に「2月9日」となります。

日時の比較を行う場合には、「after」「before」メソッドを使用します。複数のCalendarで管理されている日時の前後関係を調べる事ができます。

cal.after(cal2);
cal.before(cal3);

(実習課題1)

プログラム引数で指定した年月のカレンダーを表示するコンソールプログラムを作成しなさい。

解答例はこちら

(実習課題2)

プログラム引数で指定した年がうるう年かどうか調べるコンソールプログラムを作成しなさい。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp