Calendarクラス
このページでは日付・時刻の表示・操作に使用するCalendarクラスについて解説します。詳細な日付・時刻の表示・操作を行いたいときに使用します。
ファクトリメソッド
Calendarクラスのコンストラクタはアクセスレベルがprotectedで宣言されており、他のクラスから使用することができません。そのため、Calendarオブジェクトを生成するときは、Calendarクラスで用意されているファクトリメソッドを使用します。
戻り型 | メソッド | 説明 |
---|---|---|
static Calendar |
getInstance( ) | デフォルトのロケール、タイムゾーンを持つCalendarオブジェクトを生成します。日時はロケールとタイムゾーンに基づいた現在日時が保持されています。 |
static Calendar |
getInstance (Locale) |
引数に指定されたロケールと、デフォルトのタイムゾーンを持つCalendarオブジェクトを生成します。日時はロケールとタイムゾーンに基づいた現在日時が保持されています。 |
static Calendar |
getInstance (TimeZone) | 引数に指定されたタイムゾーンと、デフォルトのロケールを持つCalendarオブジェクトを生成します。日時はロケールとタイムゾーンに基づいた現在日時が保持されています。 |
static Calendar |
getInstance (TimeZone, Locale) |
引数に指定されたタイムゾーン、ロケールを持つCalendarオブジェクトを生成します。日時はロケールとタイムゾーンに基づいた現在日時が保持されています。 |
※ Locale定数の一覧はAPIドキュメントを参照してください。
例1
//デフォルトのロケール、タイムゾーンを持つCalendarオブジェクトcal1を生成します。
Calendar cal1 = Calendar.getInstance();
//ロケールがUSAである、Calendarオブジェクトcal2を生成します。
Calendar cal2 = Calendar.getInstance(Locale.US);
//getTimeZoneメソッドを使用し、タイムゾーンがロンドンである、Calendarオブジェクトcal3を生成します。
TimeZone tz1 = TimeZone.getTimeZone("Europe/London");
Calendar cal3 = Calendar.getInstance(tz1);
フィールド
Calendarクラスで用意されている主なフィールドについて解説します。フィールドには日付・時間の値が保持されています。setメソッド、getメソッドなどを使用し、フィールドを通し日付・時間の表示・操作を行います。
フィールド | 説明 |
---|---|
DATE | 月の日を表します。 |
DAY_OF_WEEK | 曜日を表します。 |
DAY_OF_WEEK _IN_MONTH |
月の何番目の曜日かを表します。 |
DAY_OF_YEAR | 年の何番目の日かを表します。 |
FRIDAY | DAY_OF_WEEKフィールドで表される、金曜日の値を保持します。 |
HOUR | 時間を午前何時か、午後何時かで表します。 |
HOUR_OF_DAY | 時間を24時間単位で表します。 |
MINUTE | 分を表します。 |
MONDAY | DAY_OF_WEEKフィールドで表される、月曜日の値を保持します。 |
MONTH | 月を表します。月は0~11の値で表されます。そのため、実際の月は1加える必要があります。 |
SATDAY | DAY_OF_WEEKフィールドで表される、土曜日の値を保持します。 |
SECOND | 秒を表します。 |
SUNDAY | DAY_OF_WEEKフィールドで表される、日曜日の値を保持します。 |
THURSDAY | DAY_OF_WEEKフィールドで表される、木曜日の値を保持します。 |
TUESDAY | DAY_OF_WEEKフィールドで表される、火曜日の値を保持します。 |
WEDNESDAY | DAY_OF_WEEKフィールドで表される、水曜日の値を保持します。 |
WEEK_OF_MONTH | 月の何番目の週かを表します。 |
WEEK_OF_YEAR | 年の何番目の週かを表します。 |
YEAR | 年を表します。 |
メソッド
Calendarクラスで用意されている主なメソッドについて解説します。
戻り型 | メソッド | 説明 |
---|---|---|
int | get(int) | 引数に指定された日付・時間の値を返します。 |
int | getActualMaximum(int) | 引数に指定された日付の月の最大の日を返します。 |
int | getActualMiniimum(int) | 引数に指定された日付の月の最小の日を返します。 |
Date | getTime( ) | 現在の日時を返します。 |
void | set(int, int) | 第1引数にフィールド、第2引数に値を指定し、フィールドの値を設定します。 |
void | set(int, int, int) | YEAR, MONTH, DATEの順にフィールドの値を設定します。 |
void | set(int, int, int, int, int) | YEAR, MONTH, DATE, HOUR_OF_DAY, MINUTEの順にフィールドの値を設定します。 |
void | set(int, int, int, int, int, int) | YEAR, MONTH, DATE, HOUR_OF_DAY, MINUTE, SECONDの順にフィールドの値を設定します。 |
void | setLenient( boolean) |
日付・時間の厳密な解釈を行うかを指定します。厳密な解釈を行う場合は1999年4月100日などの値に対して例外が発生します。 |
void | setTime(Date) | 引数に指定されたDateオブジェクトを設定します。 |
void | setTimeZone(TimeZone) | 引数に指定されたTimeZoneオブジェクトを設定します。 |
【例2】Calendarクラスを使用し、現在の年、月、日、曜日、時、分、秒を表示するプログラムを作成します。
import java.util.*;
class ExDate2 {
public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance(); //(1)オブジェクトの生成
int year = cal1.get(Calendar.YEAR); //(2)現在の年を取得
int month = cal1.get(Calendar.MONTH) + 1; //(3)現在の月を取得
int day = cal1.get(Calendar.DATE); //(4)現在の日を取得
int hour = cal1.get(Calendar.HOUR_OF_DAY); //(5)現在の時を取得
int minute = cal1.get(Calendar.MINUTE); //(6)現在の分を取得
int second = cal1.get(Calendar.SECOND); //(7)現在の秒を取得
StringBuffer dow = new StringBuffer();
switch (cal1.get(Calendar.DAY_OF_WEEK)) { //(8)現在の曜日を取得
case Calendar.SUNDAY: dow.append("日曜日"); break;
case Calendar.MONDAY: dow.append("月曜日"); break;
case Calendar.TUESDAY: dow.append("火曜日"); break;
case Calendar.WEDNESDAY: dow.append("水曜日"); break;
case Calendar.THURSDAY: dow.append("木曜日"); break;
case Calendar.FRIDAY: dow.append("金曜日"); break;
case Calendar.SATURDAY: dow.append("土曜日"); break;
}
//(9)現在の年、月、日、曜日、時、分、秒を表示
System.out.println(year + "/" + month + "/" + day + " " + dow
+ " " + hour + ":" + minute + ":" + second);
}
}
解説2
- (1)getInstanceメソッドを使用し、デフォルトのロケール、タイムゾーンを持つCalendarオブジェクトcal1を生成します。
- (2)getメソッドと、YEARフィールドにより、現在の年を取得します。
- (3)getメソッドと、MONTHフィールドにより、現在の月を取得します。MONTHフィールドの月は0~11の値をとるため、実際の月は1加えた値になります。
- (4)getメソッドと、DATEフィールドにより、現在の日を取得します。
- (5)getメソッドと、HOUR_OF_DAYフィールドにより、24時間単位で現在の時を取得します。
- (6)getメソッドと、MINUTEフィールドにより、現在の分を取得します。
- (7)getメソッドと、SECONDフィールドにより、現在の秒を取得します。
- (8)switch文を使用し、DAY_OF_WEEKフィールドで返される値と、各曜日のフィールドの値を比較し合致する曜日をStringBuffer変数dowに代入します。appendメソッドは引数に指定された文字列をStringBuffer変数に追記するメソッドです。
- (9)printlnメソッドを使用し、それぞれの変数に代入された現在の年、月、日、曜日、時、分、秒を表示します。
実行結果2
C:\source>javac ExDate2.java
C:\source>java ExDate2
2004/5/2 日曜日 13:28:14
C:\source>
2Calendarクラス