こんにちは。「Javaを復習する初心者」です。
前回はCalendarのインスタンスと引数なしgetXXXメソッドについて書きました。今回はint get(int field)メソッドについて書きます。引数はカレンダー・フィールドと呼ばれる定数を指定します。そのうちのCalendar.AM_PMを使ってみました。
Calendar.AM_PM
Calendar.AM_PMをgetメソッドの引数に指定すると、正午より前かどうかがint型で返却されるようです。API仕様書を見ると、以下の値が用意されていることが分かりました。
定義 | 内容 |
---|---|
AM | 深夜零時から正午の前までの時間を示す |
PM | 正午から深夜零時の前までの時間を示す |
上記を確認するため、switch文を使った単純なメソッドを作り、実験しました。メソッドは以下の動きです。
- 定義
- public static String judge(int key)
- フロー
-
- String型変数sを空文字で初期化する。
- 仮引数keyに従い、sに以下の文字を格納する。
条件 文字列 Calendar.AM “AMです。” Calendar.PM “PMです。” 上記以外 “範囲外です。” - 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に戻りました。