java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

Calendarで日付の情報を取得

投稿日:

最終更新日:2016年07月13日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

今日も良いタイトルが思いつきませんでした。今回はCalendar#getメソッドで特定の引数を指定して、年、月、日、時間、分、秒、ミリ秒を取得しました。

getメソッドに指定する定数と返却値

以下はgetメソッドに指定する定数とgetメソッドから返却される値です。

Calendar.YEAR
年が返却されます。
Calendar.MONTH
月が返却されます。
Calendar.HOUR
午前または午後の○時の○が返却されます。
Calendar.HOUR_OF_DAY
時間が返却されます。
Calendar.MINUTE
分が返却されます。
Calendar.SECOND
秒が返却されます。
Calendar.MILLISECOND
ミリ秒が返却されます。

フィールドの値を表示

今回は、setTimeInMillisとset(int year, int month, int date, int hourOfDay, int minute, int second)を使って、フィールドの値を表示しました。なぜこのsetメソッドを使ったというと、一度に複数のフィールドを設定できるsetメソッドは以下のみだったからです。

  • set(int year, int month, int date)
  • set(int year, int month, int date, int hourOfDay, int minute)
  • set(int year, int month, int date, int hourOfDay, int minute, int second)

ミリ秒まで一度に設定するメソッドは用意されてませんでした。なので最初のsetTimeInMillisでミリ秒が0にならないようにしてます。

以下はソースと実行結果です。

ソースコード

package calendarTest;

import java.util.Calendar;

public class HelloGetDateInfo {

    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();
        c.clear();

        c.setTimeInMillis(1451671445321L);
        System.out.println(c.getTime());
        System.out.println(c.getTimeInMillis());
        test(c);
        System.out.println();

        c.set(2016, 1 - 1, 2, 18, 4, 5);
        System.out.println(c.getTime());
        System.out.println(c.getTimeInMillis());
        test(c);
        System.out.println();

    }

    private static void test(Calendar c) {

        System.out.println(c.get(Calendar.YEAR)  + "年です。");
        System.out.println(c.get(Calendar.MONTH + 1) + "月です。");
        System.out.println(c.get(Calendar.HOUR) + "時です。");
        System.out.println(c.get(Calendar.HOUR_OF_DAY) + "時です。");
        System.out.println(c.get(Calendar.MINUTE) + "分です。");
        System.out.println(c.get(Calendar.SECOND) + "秒です。");
        System.out.println(c.get(Calendar.MILLISECOND) + "ミリ秒です。");

    }

}

結果

Sat Jan 02 03:04:05 JST 2016
1451671445321
2016年です。
1月です。
3時です。
3時です。
4分です。
5秒です。
321ミリ秒です。

Sat Jan 02 18:04:05 JST 2016
1451725445321
2016年です。
1月です。
6時です。
18時です。
4分です。
5秒です。
321ミリ秒です。

前半で設定したミリ秒は後半で残ってます。setメソッド呼び出しの直前でclearメソッドを呼び出してないからです。

午前・午後の文言

Calendar.HOURを指定した場合の返却値は午前か午後か不明です。なのでCalendar.AM_PMを指定して返却された値で判断して、午前・午後の文言をするのが一般的でしょうか。以下、ソースを書いて見ました。

ソースコード

package calendarTest;

import java.util.Calendar;

public class HelloGetDateInfoAmPm {

    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();
        c.clear();

        c.set(2016, 1 - 1, 2, 3, 4, 5);
        System.out.println(c.getTime());
        test(c);
        System.out.println();

        c.set(2016, 1 - 1, 2, 18, 4, 5);
        System.out.println(c.getTime());
        test(c);
        System.out.println();

    }

    private static void test(Calendar c) {

        System.out.println(
                getLabelAmPmFrom(c.get(Calendar.AM_PM))
                + c.get(Calendar.HOUR)
                + "時です。");

    }

    private static String getLabelAmPmFrom(int key) {

        String s = "";

        switch (key) {
        case Calendar.AM:
            s = "午前";
            break;

        case Calendar.PM:
            s = "午後";
            break;
        }

        return s;

    }

}

結果

Sat Jan 02 03:04:05 JST 2016
午前3時です。

Sat Jan 02 18:04:05 JST 2016
午後6時です。

これで午前・午後の文言が出力できました。