JavaでのCalendarクラスの使い方とは?現在の日付時刻取得や日付時刻の変更・比較

- システム
エンジニア - JavaでのCalendarクラスの使い方を教えてください。
- プロジェクト
マネージャー - Javaでは日付時刻を扱うクラスとして、Calendarクラスが用意されています。現在の日付時刻取得や日付時刻の変更・比較ができます。
JavaでのCalendarクラスの使い方とは?
今回は、JavaでのCalendarクラスの使い方について説明します。Javaでは日付時刻を扱うクラスとして、Calendarクラスが用意されています。現在の日付時刻取得や日付時刻の変更・比較ができます。
JavaでのCalendarクラスの使い方に興味のある方はぜひご覧ください。
日付時刻の取得
JavaのCalendarクラスはgetInstanceメソッドでオブジェクトを生成します。オブジェクトに対してgetメソッドを実行することで、年月日や時刻などの情報を取得できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import java.util.Calendar;
public class Main {
public static void main(String[] args) throws Exception {
// オブジェクト生成
Calendar cal = Calendar.getInstance();
// 年月日
System.out.println(""year:"" + cal.get(Calendar.YEAR));
System.out.println(""month:"" + cal.get(Calendar.MONTH)); // 0-11
System.out.println(""date:"" + cal.get(Calendar.DATE));
// 時刻
System.out.println(""am/pm:"" + cal.get(Calendar.AM_PM));
System.out.println(""hour:"" + cal.get(Calendar.HOUR)); // 0-11
System.out.println(""hour of day:"" + cal.get(Calendar.HOUR_OF_DAY)); // 0-23
System.out.println(""minute:"" + cal.get(Calendar.MINUTE));
System.out.println(""second:"" + cal.get(Calendar.SECOND));
System.out.println(""millisecond:"" + cal.get(Calendar.MILLISECOND));
// その他
System.out.println(""day of week:"" + cal.get(Calendar.DAY_OF_WEEK));
System.out.println(""day of year:"" + cal.get(Calendar.DAY_OF_YEAR));
System.out.println(""day of week in month:"" + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
}
}
|
実行結果は以下のようになります。(実行する日時によって結果が異なります。)
1
2
3
4
5
6
7
8
9
10
11
12
|
year:2020
month:8
date:10
am/pm:0
hour:11
hour of day:11
minute:49
second:20
millisecond:429
day of week:5
day of year:254
day of week in month:2
|
例えば、月末日を求めたい場合、以下のように記載します。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.Calendar;
public class Main {
public static void main(String[] args) throws Exception {
// オブジェクト生成
Calendar cal = Calendar.getInstance();
// 月(0-11)
System.out.println(""month:"" + cal.get(Calendar.MONTH));
// 月の最終日
System.out.println(""day of week in month:"" + cal.getActualMaximum(Calendar.DATE));
}
}
|
実行結果は以下のようになります。
1
2
|
month:8
day of week in month:30
|
Calendar.MONTHは0-11が取得されるので、8と出力されたら9月のことになります。getActualMaximumメソッドで月の最終日が取得できます。
このように、JavaではCalendarオブジェクトに対してgetメソッドを実行することで、年月日や時刻などの情報を取得できます。
日付時刻の設定
JavaではCalendarオブジェクトに対して日付時刻の設定ができます。setメソッドを使用します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import java.util.Calendar;
public class Main {
public static void main(String[] args) throws Exception {
// オブジェクト生成
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
// 設定
System.out.println(""set()"");
cal.set(2020, 9, 1, 12, 34, 56);
System.out.println(cal.getTime());
}
}
|
実行結果は以下のようになります。
1
2
3
|
Thu Sep 10 12:12:19 UTC 2020
set()
Thu Oct 01 12:34:56 UTC 2020
|
setメソッドは日付時刻を指定できます。
このように、JavaではCalendarオブジェクトに対して日付時刻の設定ができます。
日付時刻の加減算
JavaではCalendarオブジェクトに対して日付時刻の加減算ができます。addメソッドやrollメソッドを使用します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import java.util.Calendar;
public class Main {
public static void main(String[] args) throws Exception {
// オブジェクト生成
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
// 設定
System.out.println(""set()"");
cal.set(2020, 9, 1, 12, 34, 56);
System.out.println(cal.getTime());
// 加減算
System.out.println(""add()"");
cal.add(Calendar.YEAR, 3);
System.out.println(cal.getTime());
cal.add(Calendar.MONTH, -1);
System.out.println(cal.getTime());
cal.add(Calendar.DATE, 40); // 40日加算すると月が替わる
System.out.println(cal.getTime());
// 他のフィールドを変更しない(日だけがローテートする)
System.out.println(""roll()"");
cal.roll(Calendar.DATE, 40);
System.out.println(cal.getTime());
}
}
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
|
Thu Sep 10 12:12:19 UTC 2020
set()
Thu Oct 01 12:34:56 UTC 2020
add()
Sun Oct 01 12:34:56 UTC 2023
Fri Sep 01 12:34:56 UTC 2023
Wed Oct 11 12:34:56 UTC 2023
roll()
Fri Oct 20 12:34:56 UTC 2023
|
addメソッドは日付時刻の加減算ができます。rollメソッドはaddメソッドに似ていますが、他のフィールドを変更しない加減算をします。
このように、JavaではCalendarオブジェクトに対して日付時刻の加減算ができます。
日付の比較
JavaではcompareToメソッドを利用して、Calendarオブジェクトの比較ができます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import java.util.Calendar;
public class Main {
public static void main(String[] args) throws Exception {
// オブジェクト生成
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.set(2020, 9, 10, 12, 34, 56);
cal2.set(2020, 9, 11, 12, 34, 56);
System.out.println(cal1.getTime());
System.out.println(cal2.getTime());
System.out.println("""");
// 比較
System.out.println(cal1.compareTo(cal2));
System.out.println(cal2.compareTo(cal1));
System.out.println(cal1.compareTo(cal1));
}
}
|
実行結果は以下のようになります。
1
2
3
4
5
6
|
Sat Oct 10 12:34:56 UTC 2020
Sun Oct 11 12:34:56 UTC 2020
-1
1
0
|
compareToメソッドは、比較元の方が前なら-1、後なら1を返します。また、等しければ0を返します。
このように、JavaではcompareToメソッドを利用して、Calendarオブジェクトの比較ができます。
- システム
エンジニア - 日付時刻の取得や設定方法、日付時刻の加減算などよく理解できました。
- プロジェクト
マネージャー - 日付時刻取得や日付時刻の変更・比較など、実際にソースコードを書いて指定してみましょう。
まとめ
いかがでしたでしょうか。JavaでのCalendarクラスの使い方について説明します。Javaでは日付時刻を扱うクラスとして、Calendarクラスが用意されています。現在の日付時刻取得や日付時刻の変更・比較ができます。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)