こんにちは。「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時です。
これで午前・午後の文言が出力できました。