JavaのCalendarクラスの使い方をわかりやすく解説!日付や時刻の操作に便利な基本機能まとめ
生徒
「Javaで日付や時間を操作したいんですが、昔からあるCalendarってまだ使えるんですか?」
先生
「はい、CalendarクラスはDateより柔軟に日付の操作ができるクラスとして長く使われてきました。ただし、今はjava.timeパッケージが主流になってきていますが、レガシーコードやライブラリとの互換性のためにCalendarは今もよく使われています。」
生徒
「どんなふうに使えるのか教えてください!」
先生
「それでは、JavaのCalendarクラスの基本から実際の使い方まで一緒に学んでいきましょう。」
1. Calendarクラスとは?
java.util.Calendarは、Javaで日付や時刻を扱うためのクラスです。Dateよりも柔軟で、年・月・日・時・分・秒などの個別の要素を操作できる点が特徴です。
現在はjava.time.LocalDateTimeやZonedDateTimeなどの新しいAPIに置き換えられつつありますが、過去のシステムや古いライブラリでは今でも頻繁に使われています。
2. Calendarのインスタンスを作成する
Calendarは抽象クラスなので、直接インスタンス化するのではなく、getInstance()メソッドを使って取得します。
import java.util.Calendar;
public class CalendarInitExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
}
}
Fri Sep 05 11:00:00 JST 2025
このようにして取得したCalendarインスタンスは、現在の日付と時刻を保持しています。
3. 年・月・日・時刻の各要素を取得する
Calendarでは、get(int field)メソッドを使って、年・月・日・時・分・秒などの情報を個別に取得できます。
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; // 月は0から始まるので+1
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year + "年" + month + "月" + day + "日 " + hour + "時" + minute + "分" + second + "秒");
2025年9月5日 11時0分0秒
月だけは0〜11で管理されているため、表示時は+1する必要がある点に注意しましょう。
4. 日付の加算・減算をする
Calendarでは、add()メソッドを使って、日付や時刻に加算や減算ができます。たとえば「3日後」や「1ヶ月前」なども簡単に扱えます。
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, 3); // 3日後
System.out.println("3日後: " + calendar.getTime());
calendar.add(Calendar.MONTH, -1); // 1ヶ月前
System.out.println("1ヶ月前: " + calendar.getTime());
3日後: Mon Sep 08 11:00:00 JST 2025
1ヶ月前: Thu Aug 08 11:00:00 JST 2025
このadd()メソッドを使えば、スケジュール機能や日付比較などに便利です。
5. Calendarで日付を設定する方法
set()メソッドを使うことで、特定の年月日時分秒を手動で設定できます。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2022);
calendar.set(Calendar.MONTH, Calendar.JUNE);
calendar.set(Calendar.DAY_OF_MONTH, 15);
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);
System.out.println("設定した日時: " + calendar.getTime());
設定した日時: Wed Jun 15 10:30:00 JST 2022
MONTHは列挙定数(例:Calendar.JUNE)も使えますし、0〜11の数値でも指定できます。
6. Date型との相互変換
CalendarクラスはDateとの相互変換も簡単にできます。レガシーAPIとの連携やデータベース操作などで役立ちます。
import java.util.Date;
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime(); // Calendar → Date
calendar.setTime(new Date()); // Date → Calendar
これにより、SimpleDateFormatや古いライブラリと組み合わせて使うことができます。
7. Calendarの注意点と使いどころ
JavaのCalendarクラスは柔軟性は高いですが、タイムゾーンやスレッドセーフでない点に注意が必要です。複数スレッドで共有する場合は、毎回新しくインスタンスを生成するのが安全です。
また、2025年以降の開発ではjava.time(LocalDateやZonedDateTimeなど)を使うことが推奨されています。ただし、既存コードや一部のフレームワークではCalendarの使用が前提となっていることがあるため、基本的な使い方を理解しておくことは重要です。