Javaの道 Javaに関する
ニュースJava基本Servlet・JSPオープンソースFAQ本・ソフトウェアリンク集掲示板
Javaの道 > Java基本 > 日付・時刻 −2.Calendarクラス
更新日:2006/3/17
日付・時刻−2.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>

このページのトップへ
ニュースJava基本Servlet・JSPオープンソースFAQ本・ソフトウェアリンク集掲示板
Javaの道_CopyrightJavaの道