JavaでCalendarクラスを使う方法【初心者向け】

初心者向けにJavaでCalendarクラスを使う方法について解説しています。日付の処理を行う便利なクラスで覚えておくといざという時役立つでしょう。日付の操作など実際にサンプルコードを書いているので、参考にしてみてください。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,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つめの引数にマイナス値とします。

 

[PR] Javaで挫折しない学習方法を動画で公開中

実際に書いてみよう

ここでは、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人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。