Javaで日付処理を行う場合、Calenderクラスを利用するのが便利です。
本記事では、カレンダーを表示する処理をサンプルに、Calenderクラスの基本的な使い方についてご紹介していきます。
Javaでカレンダー表示
まずJavaでカレンダー表示するためのサンプルコードを掲載しておきます。
サンプルコード
import java.util.Calendar; public class Main { public static void main(String[] args) { int thisYear = Calendar.getInstance().get(Calendar.YEAR); for (int month = 1; month <=12; month++) { System.out.println(thisYear + "年" + month + "月"); String[] weeks= {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; for(String s:weeks) { System.out.printf("%4s",s); } System.out.println(); new SampleCalendar(thisYear, month); } } } class SampleCalendar { private int year; private int month; private int firstDay; private int lastDay; SampleCalendar(int year, int month) { this.year = year; this.month = month; calc(); } private void calc() { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(year, month -1, 1); firstDay = calendar.get(Calendar.DAY_OF_WEEK); int day = 1 - (firstDay - 1) % 7; calendar.add(Calendar.MONTH, 1); calendar.add(Calendar.DATE, -1); lastDay = calendar.get(Calendar.DATE); while (day <= lastDay) { for (int ii = 0; ii < 7 && day <= lastDay; ii++) { System.out.printf(day < 1 ? " " : "%4d", day); day++; } System.out.println(); } System.out.println(); } }
表示内容
2021年1月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 31 2021年2月 Sun Mon Tue Wed Thu Fri Sat 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 2021年3月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 31 2021年4月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 2021年5月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 31 2021年6月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 2021年7月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 31 2021年8月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 31 2021年9月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 2021年10月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 31 2021年11月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 2021年12月 Sun Mon Tue Wed Thu Fri Sat 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 29 30 31
Java Calendarクラスの処理を確認しよう
カレンダーのサンプルをCalendarクラスを利用して作成したので、実際にサンプルコードで使われているCalendarクラスのメソッドについて確認していきましょう。
getInstanceメソッド
まずMainメソッドの6行目で利用しているgetInstanceメソッドですが、オブジェクトを作成する役割を担います。
クラスからインスタンスを作成するためのnew演算子に相当する処理です。
Calendarクラスを利用する際の基本となる呼び出し処理です。
clearメソッド
clearメソッドは、オブジェクトのフィールド値を初期化するためのメソッドです。
サンプルの33行目で記述しているように、引数なしで実行した場合は全フィールドが初期化されます。
インスタンス名.clear(); インスタンス名.clear(int フィールド名);
getメソッド
getメソッドは、オブジェクトから日時の情報を取得するためのメソッドです。
インスタンス名.get(int フィールド名);
サンプルでは「Calendar.YEAR」といったCalenderクラスのフィールド名が利用されています。
これらはstatic int型で定義されており、取得したいフィールド名を指定することで、オブジェクトに保存された値を取得出来ます。
頻繁に利用されるフィールド名は下記です。
- YEAR: 年
- MONTH: 月
- DATE: 日
- AM_PM: AMまたはPM
- HOUR: 午前または午後の時間
- MINUTE: 分
- SECOND: 秒
- DAY_OF_WEEK: 曜日
setメソッド
カレンダークラスのオブジェクトに対して、日時を設定するためのメソッドです。
サンプルコードの34行目では引数に「年月日」を指定していますが、フィールド名を指定して値を設定したり、日時または分秒まで指定して設定することも可能です。
インスタンス名.set(int フィールド名, int 値); インスタンス名.set(int 年, int 月, int 日); インスタンス名.set(int 年, int 月, int 日, int 時, int 分); インスタンス名.set(int 年, int 月, int 日, int 時, int 分, int 秒);
Calendarクラスのsetメソッドはオーバーロードされているため、引数の指定方法により設定する値が異なります。
addメソッド
addメソッドは、オブジェクトのフィールド値を加算・減算するためのメソッドです。
サンプルコードの37・38行目のように、第1引数にフィールド名、第2引数に加算・減算したい値を指定します。
インスタンス名.add(int フィールド名, int 値);
減算指定したい場合は、第2引数の値をマイナスにします。
さいごに: JavaのCalendarクラスで日付操作に挑戦しよう
本記事では、JavaのCalendarクラスの使い方について、その名の通りカレンダーを表示するサンプルを掲載しながらご紹介してきました。
日付操作を行うためのクラスはいくつか存在しますが、Calendarクラスも良く利用される処理方法です。
最初は少し違和感を感じる操作部分もあるかも知れませんが、使い方自体はシンプルですので、実際に利用しながら理解を深めてください。
Calendarクラスの説明用として掲載しているので、カレンダー機能として実際に利用するには不十分な箇所もあるかと思います。