JavaのCalendarクラス

IT

Calendarクラス

java.lang.Object
 java.util.Calendar

Calendarクラスは中小クラスであり、年・月・日といった日付のそれそれの情報や、時・分・秒といった時刻のそれそれの情報を操作することができます。

Calendarクラスのコンストラクタはprotectedが指定されていため、コンストラクタを明示的に呼び出すことはできないです。

その代わりに以下のように静的メソッドであるgetInstanceメソッドを使って、現在のカレンダーを取得することができます。

Calendar now = Calendar.getInstance();

Calendarクラスの主なフィールド

年月日を表すフィールド

戻り値フィールド説明
static intYEAR年の番号を示します。
static intMONTH月の番号を示します。
static intWEEK_OF_YEAR年に対しての週番号を示します。
static intWEEK_OF_MONTH月に対しての週番号を示します。
static intDATE日付のメンバ変数を示します。
static intDAY_OF_YEAR年に対しての何日目かの番号を示します。

時刻を表すフィールド

戻り値フィールド説明
static intHOUR時の番号を示します。
static intMINUTE分の番号を示します。
static intSECOND秒の番号を示します。
static intMILLISECONDミリ秒の番号を示します。

月を表すフィールド

戻り値フィールド説明
static intJANUARY1月を示す値です。
static intFEBRUARY2月を示す値です。
static intMARCH3月を示す値です。
static intAPRIL4月を示す値です。
static intMAY5月を示す値です。
static intJUNE6月を示す値です。
static intJULY7月を示す値です。
static intAUGUST8月を示す値です。
static intSEPTEMBER9月を示す値です。
static intOCTOBER10月を示す値です。
static intNOVEMBER11月を示す値です。
static intDECEMBER12月を示す値です。

曜日を表すフィールド

戻り値フィールド説明
static intSUNDAY日曜日を示す値です。
static intMONDAY月曜日を示す値です。
static intTUSEDAY火曜日を示す値です。
static intWEDNESDAY水曜日を示す値です。
static intTHURSDAY木曜日を示す値です。
static intFRIDAY金曜日を示す値です。
static intSATURDAY土曜日を示す値です。

Calendarクラスの主なメソッド

戻り値メソッド説明
booleanbefore(Object when)whenよりも現在の時刻が前ならば、真を返します。
booleanafter(Object when)whenよりも現在の時刻が後ならば、真を返します。
booleanequals(Object obj)objと現在の時刻が同じならば、真を返します。
intget(int field)fieldに指定した位置の要素の値を返します。
static CalendargetInstance()マシンに設定された既定の場所とタイムゾーンのCalendarオブジェクトを返します。
DategetTime()既定の場所とタイムゾーンに設定されたDateオブジェクトを返します。
voidset(int field, int value)fieldに指定した位置の要素の値をvalueにします。
voidset(int year, int month, int date, int hourOfDay, int minute)Calendarオブジェクトのそれそれの要素の値を引数で与えた値にします。
StringtoString()Calendarを文字列にして返します。

日付を扱う場合の注意点

(その1)月の扱い

メンバ変数MONTHで取れる月の値は、0から11となるため、そのまま使うと実際よりも1か月前の月となってしまいます。

使用する時はフィールドMONTHを使って取得した値に1を足します。(サンプルプログラム22行目)

(その2)曜日の扱い

曜日を考える際は、週内で何日目なのかを確認する必要があるため、DAY_OF_WEEKを使って週の何日目かを取得します。

ここで取得できる値は1から7です。以下の配列daysの内容を見ると、フィールドDAY_OF_WEEKから取得した値と、配列daysの添え字の番号がずれてしまいます。

使用する時はメンバ変数DAY_OF_WEEKから取得した値から1を引いて用います。(サンプルプログラム31行目)

配列daysの内容
要素
days[0]日曜日
days[1]月曜日
days[2]火曜日
days[3]水曜日
days[4]木曜日
days[5]金曜日
days[6]土曜日

サンプルプログラム

Sample.java

Java
import java.util.*;

class Sample{
    public static void main(String args[]) {
        int year;
        int month;
        int date;
        int hour;
        int minute;
        int second;
        int dayofweek;
        //曜日の配列を生成します
        String days[] = {"日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"};
        //Calendarオブジェクトを取得します
        Calendar now = Calendar.getInstance();
        
        //日付を出力します
        System.out.println( now.getTime());
        
        //年月日の変数に代入します
        year = now.get(now.YEAR);
        month = now.get(now.MONTH) + 1;
        date = now.get(now.DATE);
        
        //時刻の変数に代入します
        hour = now.get(now.HOUR);
        minute = now.get(now.MINUTE);
        second = now.get(now.SECOND);
        
        //曜日の変数に代入します
        dayofweek = now.get(now.DAY_OF_WEEK) - 1;
        
        //書式を付けて日付を出力します
        System.out.println(
            year + "" +
            month + "" +
            date + "" +
            hour + "" +
            minute + "" +
            second + "" +
            days[dayofweek]	
        );
    }
}

コメント

タイトルとURLをコピーしました