JavaでCalendarクラスを使う方法【初心者向け】
初心者向けにJavaでCalendarクラスを使う方法について解説しています。日付の処理を行う便利なクラスで覚えておくといざという時役立つでしょう。日付の操作など実際にサンプルコードを書いているので、参考にしてみてください。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
初心者向けにJavaで書くCalendarの使い方について解説。Calendarの書き方から実際にサンプルプログラムを書きながら説明しています。
Javaエンジニアを目指している人は今のうちに覚えておきましょう。
なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。
Calendarクラスとは
CalendarクラスはJavaで日付の処理を行うためのクラスです。JDK1.1より導入されました。
JDK1.0までは、Dateクラスが日付の処理を行うためのクラスでしたが、より便利なクラスとしてDateクラスに代わり作られました。
それまでのコードとの互換性のためにDateクラスは残してはいますが、JDK1.1以降はCalendarクラスが日付処理の中心となっています。
ちなみにですがJDK8からは、DateTime APIという新しい日付処理のクラス群も作られました。
JDK8以降はこちらを中心にプログラミングをしていくことにはなりますが、CalendarクラスはJDK1.1から7まで長きに渡り、日付処理を担ってきました。(JDK1.1は1997年リリース、JDK8は2014年リリースです)
これからはDateTime APIが中心になると考えられていますが、まだまだCalendarクラスを使ったコードが大半です。しっかり使い方を覚えておきましょう。
Calendarの書き方
それではCalendarの使い方を見ていきます。
Calendarクラスを使うにはまず、Calendar#getInstance( )メソッドを使い、Calendarのインスタンスを生成します。生成時点の日付/時刻を保持したインスタンスとなります。
Calendar cal = Calendar.getInstance();
これでCalendarのインスタンスが生成されます。
日付時刻の取得
Calendarのgetメソッドを使って日付/時刻の値を取得します。
引数にCalendarクラスの定数を指定することで取得したい日付/時刻の種類を指定します。
たとえば、Calendarインスタンスが保持している年を取得したい場合は、以下のように書きます。
int year = cal.get(Calendar.YEAR);
日付を取得するには以下の定数を指定します。
- Calendar.YEAR
Calendarインスタンスが保持している日付のうち年を返す - Calendar.MONTH
Calendarインスタンスが保持している日付のうち月を返す。但し、返す範囲は0から11までとなり、実際の月より一つ少なくなるため、注意が必要 - Calendar.DATE
Calendarインスタンスが保持している日付のうち日を返す
時刻を取得するには以下の定数を指定します。
- Calendar.AM_PM
Calendarインスタンスが保持している時刻のうち、午前(Calendar.AM)/午後(Calendar.PM)を返す。 - Calendar.HOUR
Calendarインスタンスが保持している時刻のうち時間を返す(0 – 11) - Calendar.HOUR_OF_DAY
Calendarインスタンスが保持している時刻のうち時間を返す(0 – 23) - Calendar.MINUTE
Calendarインスタンスが保持している時刻のうち分を返す - Calendar.SECOND
Calendarインスタンスが保持している時刻のうち秒を返す - Calendar.MILLISECOND
Calendarインスタンスが保持している時刻のうちミリ秒を返す
その他
- Calendar.DAY_OF_WEEK
Calendarインスタンスが保持している曜日を以下の定数値として返す- Calendar.SUNDAY
- Calendar.MONDAY
- Calendar.TUESDAY
- Calendar.WEDNESDAY
- Calendar.TURSDAY
- Calendar.FRIDAY
- Calendar.SATURDAY
- Calendar.DAY_OF_YEAR
Calendarインスタンスが保持している日付がその年の何日目なのかを返す - Calendar.DAY_OF_WEEK_IN_MONTH
Calendarインスタンスが保持している曜日がその月の何回目なのかを返す
日付の操作
Calendarのaddメソッドを使って日付/時刻などのフィールド値を操作します。
引数にCalendarクラスの定数を指定することで操作したい日付/時刻の種類を指定します。
たとえば、Calendarインスタンスが保持している年を10年先にしたい場合は、以下のように書きます。
cal.add(Calendar.YEAR, 10);
過去の日付としたい場合は、addメソッドに渡す2つめの引数にマイナス値とします。
実際に書いてみよう
ここでは、Calendarクラスのインスタンス取得から日付の操作、表示のサンプルコードを実際に書いてみます。実行結果も合わせて参考にしてみてください。
package calendarSample; import java.util.Calendar; public class CalendarSample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); //当日日付時刻 displayCalendarData(cal); System.out.println(); //10年後日付時刻 cal.add(Calendar.YEAR, 10); displayCalendarData(cal); cal.add(Calendar.YEAR, -10); System.out.println(); //10ヶ月後日付時刻 cal.add(Calendar.MONTH, 10); displayCalendarData(cal); cal.add(Calendar.MONTH, -10); System.out.println(); //10日後日付時刻 cal.add(Calendar.DATE, 10); displayCalendarData(cal); cal.add(Calendar.DATE, -10); System.out.println(); //10時間後日付時刻 cal.add(Calendar.HOUR, 10); displayCalendarData(cal); cal.add(Calendar.HOUR, -10); System.out.println(); //10分後日付時刻 cal.add(Calendar.MINUTE, 10); displayCalendarData(cal); cal.add(Calendar.MINUTE, -10); System.out.println(); //10秒後日付時刻 cal.add(Calendar.SECOND, 10); displayCalendarData(cal); cal.add(Calendar.SECOND, -10); System.out.println(); } public static void displayCalendarData(Calendar cal) { System.out.print(cal.get(Calendar.YEAR) + "年"); System.out.print(cal.get(Calendar.MONTH) + 1 + "月"); System.out.print(cal.get(Calendar.DAY_OF_MONTH) + "日"); int week = cal.get(Calendar.DAY_OF_WEEK); String weekString = ""; switch(week) { case Calendar.MONDAY: weekString = "月曜日"; break; case Calendar.TUESDAY: weekString = "火曜日"; break; case Calendar.WEDNESDAY: weekString = "水曜日"; break; case Calendar.THURSDAY: weekString = "木曜日"; break; case Calendar.FRIDAY: weekString = "金曜日"; break; case Calendar.SATURDAY: weekString = "土曜日"; break; case Calendar.SUNDAY: weekString = "日曜日"; break; } System.out.println(weekString); if(Calendar.AM == cal.get(Calendar.AM_PM)) { System.out.print("午前"); } else { System.out.print("午前"); } System.out.print(cal.get(Calendar.HOUR) + "時"); System.out.print("(" + cal.get(Calendar.HOUR_OF_DAY) + "時)"); System.out.print(cal.get(Calendar.MINUTE) + "分"); System.out.print(cal.get(Calendar.SECOND) + "秒"); System.out.println(cal.get(Calendar.MILLISECOND) + "ミリ秒"); } }
実行すると以下のような結果になります。
2017年12月1日金曜日 午前6時(18時)16分29秒983ミリ秒 2027年12月1日水曜日 午前6時(18時)16分29秒983ミリ秒 2018年10月1日月曜日 午前6時(18時)16分29秒983ミリ秒 2017年12月11日月曜日 午前6時(18時)16分29秒983ミリ秒 2017年12月2日土曜日 午前4時(4時)16分29秒983ミリ秒 2017年12月1日金曜日 午前6時(18時)26分29秒983ミリ秒 2017年12月1日金曜日 午前6時(18時)16分39秒983ミリ秒
DateTime APIが主流となりつつありますが、まだまだ現役のCalendarクラスです。使い方をしっかり覚えておきましょう。
入門向けJavaの学習サイトもまとめているので、合わせてご覧ください。
また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。
JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、習得することが可能です。