こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

Calendarで午前午後を取得

こんにちは。「Javaを復習する初心者」です。前回はCalendarのインスタンスと引数なしgetXXXメソッドについて書きました。今回はint get(int field)メソッドについて書きます。引数はカレンダー・フィールドと呼ばれる定数を指定します。そのうちのCalendar.AM_PMを使ってみました。

Calendar.AM_PMをgetメソッドの引数に指定すると、正午より前かどうかがint型で返却されるようです。API仕様書を見ると、以下の値が用意されていることが分かりました。

定義

内容
AM

深夜零時から正午の前までの時間を示す
PM

正午から深夜零時の前までの時間を示す

上記を確認するため、switch文を使った単純なメソッドを作り、実験しました。メソッドは以下の動きです。

定義
public static String judge(int key)
フロー
  1. String型変数sを空文字で初期化する。
  2. 仮引数keyに従い、sに以下の文字を格納する。
    条件

    文字列

    Calendar.AM

    “AMです。”

    Calendar.PM

    “PMです。”

    上記以外

    “範囲外です。”
  3. sを返却する。

プログラム

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

package calendarTest;

import java.util.Calendar;

public class HelloGetAmPm {

    public static void main(String[] args) {

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

        c.setTimeInMillis(1000L * 60L * 60L * 3L - 1L);
        System.out.println(c.getTime());
        System.out.println(judge((c.get(Calendar.AM_PM))));

        System.out.println();

        c.setTimeInMillis(1000L * 60L * 60L * 3L);
        System.out.println(c.getTime());
        System.out.println(judge((c.get(Calendar.AM_PM))));

        System.out.println();

        c.setTimeInMillis(1000L * 60L * 60L * 15L -1L);
        System.out.println(c.getTime());
        System.out.println(judge((c.get(Calendar.AM_PM))));

        System.out.println();

        c.setTimeInMillis(1000L * 60L * 60L * 15L);
        System.out.println(c.getTime());
        System.out.println(judge((c.get(Calendar.AM_PM))));
    }

    public static String judge(int key) {

        String s = "";

        switch (key) {
        case Calendar.AM:
            s = "AMです。";
            break;

        case Calendar.PM:
            s = "PMです。";
            break;
        default:
            s = "範囲外です。";
            break;
        }

        return s;
    }

}
Thu Jan 01 11:59:59 JST 1970
AMです。

Thu Jan 01 12:00:00 JST 1970
PMです。

Thu Jan 01 23:59:59 JST 1970
PMです。

Fri Jan 02 00:00:00 JST 1970
AMです。

解説

clear()メソッドを使って初期化し、setTimeInMillisで時間を設定しています。setTimeInMillisの引数はlong型です。long型の数値リテラルを使うため、数字の末尾にLを使ってます。

1970年1月1日で実験です。

setTimeの引数を1000L * 60L * 60L * 3L – 1Lに指定したら11:59:59になりました。9:00:00スタートらしいです。タイムゾーンがAsia/Tokyoであるからだと思います。引数を1000L * 60L * 60L * 3Lにした場合、ちょうど正午です。それぞれの設定でswitch文から期待通りの文字列が格納されました。日付が変わった「Fri Jan 02 00:00:00 JST 1970」ではAMに戻りました。