Java日付 - java.util.Calendarクラス
Calendarクラス
Calendarクラス(java.utilパッケージ)は、Javaで日付や時刻に関する処理を行う場合に使用します。
日付/時刻
Calendarクラスのインスタンスを生成するには、new演算子ではなくgetInstanceメソッドを使用します。
Calendar cal = Calendar.getInstance();
getTimeメソッド
getTimeメソッドは、カレンダーの日付/時刻を取得します。
public final Date getTime()
getTimeメソッドを利用すると、カレンダーから現在の時刻をDateオブジェクト(java.utilパッケージ)として取得できます。
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalTime {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 結果 : Mon Sep 05 11:34:21 KST 2022
}
}
実行結果:
Mon Sep 05 11:35:30 KST 2022
getメソッド
getメソッドは、日付/時刻要素を取得します。
public int get(int field)
field: 取得する日付/時刻フィールド
カレンダーから特定の日付/時刻要素を取得するには、getメソッドを使用します。getメソッドには、取得したい日付/時刻要素に対応する整数を指定します。
Calendarクラスで使用できる主な定数(日付/時刻要素)
| 定数 | 概要 |
|---|---|
YEAR |
年 |
MONTH |
月(0~11) |
DATE |
日 |
DAY_OF_YEAR |
その年の何日目か |
WEEK_OF_MONTH |
その月の何週目か |
WEEK_OF_YEAR |
その年の何週目か |
HOUR_OF_DAY |
時(24時間) |
HOUR |
時(12時間) |
AM_PM |
午前(0)、午後(1) |
MINUTE |
分 |
SECOND |
秒 |
MILLISECOND |
ミリ秒 |
DAY_OF_WEEK |
曜日 |
DAY_OF_WEEK(曜日)は、戻り値としてSUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAYなどの定数を返します。
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalGet {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.YEAR)); // 結果: 2022
System.out.println(cal.get(Calendar.MONTH)); // 結果: 8
System.out.println(cal.get(Calendar.DATE)); // 結果: 5
}
}
実行結果:
2022
8
5
setメソッド
setメソッドは、日付/時刻要素を設定します。
public final void set(int year, int month, int date [,int hour, int minute])
public void set(int field, int value)
year: 年
month: 月
date: 日
hour: 時
minute: 分
field: 設定する日付/時刻フィールド
value: 引数fieldに設定する値
カレンダーの日付/時刻要素を設定するには、setメソッドを使用します。年月日時分をまとめて指定する場合は、1つ目の構文を使用します。特定の日付/時刻要素(例: 年)を指定する場合は、2つ目の構文で日付/時刻フィールドと値の組み合わせを指定します。引数fieldに指定できる値については、上記のgetメソッドの表を参照してください。
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalSet {
public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
cal1.set(2022, 8, 1, 15, 20, 10);
System.out.println(cal1.getTime()); // 結果: Thu Sep 01 15:20:10 KST 2022
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.YEAR, 2022);
System.out.println(cal2.getTime()); // 結果: Mon Sep 05 11:41:55 KST 2022
}
}
実行結果:
Thu Sep 01 15:20:10 KST 2022
Mon Sep 05 11:41:55 KST 2022
addメソッド
addメソッドは、日付/時刻要素に対して加算/減算を行います。
public abstract void add(int field, int amount)
field: 演算する日付/時刻フィールド
amount: 増減分
現在の日付/時刻要素を基準に値を加算または減算するには、addメソッドを使用します。addメソッドでは、指定された日付/時刻要素に対して、引数amountの値だけを加算します。引数amountが負数であれば減算します。
CalAdd.java
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalAdd {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 結果: Mon Sep 05 11:43:44 KST 2022
cal.add(Calendar.YEAR, 3);
System.out.println(cal.getTime()); // 結果: Fri Sep 05 11:43:44 KST 2025
cal.add(Calendar.YEAR, -5);
System.out.println(cal.getTime()); // 結果: Sat Sep 05 11:43:44 KST 2020
}
}
実行結果:
Mon Sep 05 11:43:44 KST 2022
Fri Sep 05 11:43:44 KST 2025
Sat Sep 05 11:43:44 KST 2020
rollメソッド
rollメソッドは、日付/時刻要素を加算/減算(ローリング)します。
public void roll(int field, int amount)
public abstract void roll(int field, boolean up)
field: 加算/減算する日付/時刻フィールド
amount: 増減分
up: 増加するかどうか
rollメソッドもaddメソッドと同じように日付/時刻要素を加算/減算します。ただし、addメソッドと異なる点は次のとおりです。
-
他のフィールドに影響しません。
17:59に1分を加えると、addメソッドでは時間が繰り上がって18:00になります。しかし、rollメソッドでは繰り上がらず、17:00になります。 -
2つ目の引数にboolean値を指定できます。
2つ目の引数にtrueを指定すると指定された日付/時刻フィールドを増加させ、falseを指定すると減少させます。
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalRoll {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 結果: Mon Sep 05 11:46:43 KST 2022
cal.roll(Calendar.MINUTE, true);
System.out.println(cal.getTime()); // 結果: Mon Sep 05 11:47:43 KST 2022
}
}
実行結果:
Mon Sep 05 11:46:43 KST 2022
Mon Sep 05 11:47:43 KST 2022
clearメソッド
clearメソッドは、日付/時刻要素を消去します。
public final void clear([int field])
field: 消去する日付/時刻フィールド
clearメソッドを使用すると、指定された日付/時刻要素の値を消去します。消去されたフィールドには、フィールドに応じて決められた初期値が設定されます。
引数fieldが省略されると、すべてのフィールドが消去されます。その場合は「1970/01/01 00:00:00」になります。
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalClear {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime()); // 結果: Mon Sep 05 11:52:06 KST 2022
cal.clear(Calendar.SECOND);
System.out.println(cal.getTime()); // 結果: Mon Sep 05 11:52:00 KST 2022
cal.clear();
System.out.println(cal.getTime()); // 結果: Thu Jan 01 00:00:00 KST 1970
}
}
実行結果:
Mon Sep 05 11:52:06 KST 2022
Mon Sep 05 11:52:00 KST 2022
Thu Jan 01 00:00:00 KST 1970
before/equals/afterメソッド
before/equals/afterメソッドは、日付を比較します。
public boolean after(Object when)
public boolean before(Object when)
public boolean equals(Object when)
when: 比較するカレンダー
カレンダーの大小を比較するには、before/equals/afterメソッドを使用します。beforeメソッドは比較対象のカレンダーが現在のカレンダーより前の場合、equalsメソッドは同一の場合、afterメソッドは後の場合に、それぞれtrueを返します。
CalEquals.java
package com.devkuma.basic.datetime;
import java.util.Calendar;
public class CalEquals {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal.set(Calendar.YEAR, 2020);
cal2.set(Calendar.YEAR, 2015);
System.out.println(cal.before(cal2)); // 結果: false
System.out.println(cal.equals(cal2)); // 結果: false
System.out.println(cal.after(cal2)); // 結果: true
}
}
実行結果:
false
false
true
カレンダーが同一であるとは、日付/時刻の値が同じであるだけでなく、タイムゾーンやロケールなどのカレンダー設定も同じであることを意味します。異なるカレンダーに対してequalsメソッドはfalseを返します。