Java日付 - java.util.Calendarクラス

Calendarクラス

Calendarクラス(java.utilパッケージ)は、Javaで日付や時刻に関する処理を行う場合に使用します。

日付/時刻

Calendarクラスのインスタンスを生成するには、new演算子ではなくgetInstanceメソッドを使用します。

Calendar cal = Calendar.getInstance();

getTimeメソッド

getTimeメソッドは、カレンダーの日付/時刻を取得します。

public final Date getTime()

getTimeメソッドを利用すると、カレンダーから現在の時刻をDateオブジェクト(java.utilパッケージ)として取得できます。

package com.devkuma.basic.datetime;

import java.util.Calendar;

public class CalTime {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTime());  // 結果 : Mon Sep 05 11:34:21 KST 2022
    }
}

実行結果:

Mon Sep 05 11:35:30 KST 2022

getメソッド

getメソッドは、日付/時刻要素を取得します。

public int get(int field)
  field: 取得する日付/時刻フィールド

カレンダーから特定の日付/時刻要素を取得するには、getメソッドを使用します。getメソッドには、取得したい日付/時刻要素に対応する整数を指定します。

Calendarクラスで使用できる主な定数(日付/時刻要素)

定数 概要
YEAR
MONTH 月(0~11)
DATE
DAY_OF_YEAR その年の何日目か
WEEK_OF_MONTH その月の何週目か
WEEK_OF_YEAR その年の何週目か
HOUR_OF_DAY 時(24時間)
HOUR 時(12時間)
AM_PM 午前(0)、午後(1)
MINUTE
SECOND
MILLISECOND ミリ秒
DAY_OF_WEEK 曜日

DAY_OF_WEEK(曜日)は、戻り値としてSUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAYなどの定数を返します。

package com.devkuma.basic.datetime;

import java.util.Calendar;

public class CalGet {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.get(Calendar.YEAR)); // 結果: 2022
        System.out.println(cal.get(Calendar.MONTH)); // 結果: 8
        System.out.println(cal.get(Calendar.DATE)); // 結果: 5
    }
}

実行結果:

2022
8
5

setメソッド

setメソッドは、日付/時刻要素を設定します。

public final void set(int year, int month, int date [,int hour, int minute])
public void set(int field, int value)
  year: 
  month: 
  date: 
  hour: 
  minute: 
  field: 設定する日付/時刻フィールド
  value: 引数fieldに設定する値

カレンダーの日付/時刻要素を設定するには、setメソッドを使用します。年月日時分をまとめて指定する場合は、1つ目の構文を使用します。特定の日付/時刻要素(例: 年)を指定する場合は、2つ目の構文で日付/時刻フィールドと値の組み合わせを指定します。引数fieldに指定できる値については、上記のgetメソッドの表を参照してください。

package com.devkuma.basic.datetime;

import java.util.Calendar;

public class CalSet {

    public static void main(String[] args) {
        Calendar cal1 = Calendar.getInstance();
        cal1.set(2022, 8, 1, 15, 20, 10);
        System.out.println(cal1.getTime()); // 結果: Thu Sep 01 15:20:10 KST 2022

        Calendar cal2 = Calendar.getInstance();
        cal2.set(Calendar.YEAR, 2022);
        System.out.println(cal2.getTime()); // 結果: Mon Sep 05 11:41:55 KST 2022
    }
}

実行結果:

Thu Sep 01 15:20:10 KST 2022
Mon Sep 05 11:41:55 KST 2022

addメソッド

addメソッドは、日付/時刻要素に対して加算/減算を行います。

public abstract void add(int field, int amount)
  field: 演算する日付/時刻フィールド
  amount: 増減分

現在の日付/時刻要素を基準に値を加算または減算するには、addメソッドを使用します。addメソッドでは、指定された日付/時刻要素に対して、引数amountの値だけを加算します。引数amountが負数であれば減算します。

CalAdd.java

package com.devkuma.basic.datetime;

import java.util.Calendar;

public class CalAdd {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTime());  // 結果: Mon Sep 05 11:43:44 KST 2022

        cal.add(Calendar.YEAR, 3);
        System.out.println(cal.getTime());  // 結果: Fri Sep 05 11:43:44 KST 2025

        cal.add(Calendar.YEAR, -5);
        System.out.println(cal.getTime());  // 結果: Sat Sep 05 11:43:44 KST 2020
    }
}

実行結果:

Mon Sep 05 11:43:44 KST 2022
Fri Sep 05 11:43:44 KST 2025
Sat Sep 05 11:43:44 KST 2020

rollメソッド

rollメソッドは、日付/時刻要素を加算/減算(ローリング)します。

public void roll(int field, int amount)
public abstract void roll(int field, boolean up)
  field: 加算/減算する日付/時刻フィールド
  amount: 増減分
  up: 増加するかどうか

rollメソッドもaddメソッドと同じように日付/時刻要素を加算/減算します。ただし、addメソッドと異なる点は次のとおりです。

  1. 他のフィールドに影響しません。
    17:59に1分を加えると、addメソッドでは時間が繰り上がって18:00になります。しかし、rollメソッドでは繰り上がらず、17:00になります。

  2. 2つ目の引数にboolean値を指定できます。
    2つ目の引数にtrueを指定すると指定された日付/時刻フィールドを増加させ、falseを指定すると減少させます。

package com.devkuma.basic.datetime;

import java.util.Calendar;

public class CalRoll {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTime());  // 結果: Mon Sep 05 11:46:43 KST 2022

        cal.roll(Calendar.MINUTE, true);
        System.out.println(cal.getTime());  // 結果: Mon Sep 05 11:47:43 KST 2022
    }
}

実行結果:

Mon Sep 05 11:46:43 KST 2022
Mon Sep 05 11:47:43 KST 2022

clearメソッド

clearメソッドは、日付/時刻要素を消去します。

public final void clear([int field])
  field: 消去する日付/時刻フィールド

clearメソッドを使用すると、指定された日付/時刻要素の値を消去します。消去されたフィールドには、フィールドに応じて決められた初期値が設定されます。

引数fieldが省略されると、すべてのフィールドが消去されます。その場合は「1970/01/01 00:00:00」になります。

package com.devkuma.basic.datetime;

import java.util.Calendar;

public class CalClear {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTime());  // 結果: Mon Sep 05 11:52:06 KST 2022

        cal.clear(Calendar.SECOND);
        System.out.println(cal.getTime());  // 結果: Mon Sep 05 11:52:00 KST 2022

        cal.clear();
        System.out.println(cal.getTime());  // 結果: Thu Jan 01 00:00:00 KST 1970
    }
}

実行結果:

Mon Sep 05 11:52:06 KST 2022
Mon Sep 05 11:52:00 KST 2022
Thu Jan 01 00:00:00 KST 1970

before/equals/afterメソッド

before/equals/afterメソッドは、日付を比較します。

public boolean after(Object when)
public boolean before(Object when)
public boolean equals(Object when)
  when: 比較するカレンダー

カレンダーの大小を比較するには、before/equals/afterメソッドを使用します。beforeメソッドは比較対象のカレンダーが現在のカレンダーより前の場合、equalsメソッドは同一の場合、afterメソッドは後の場合に、それぞれtrueを返します。

CalEquals.java

package com.devkuma.basic.datetime;

import java.util.Calendar;

public class CalEquals {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2020);
        cal2.set(Calendar.YEAR, 2015);
        System.out.println(cal.before(cal2));   // 結果: false
        System.out.println(cal.equals(cal2));   // 結果: false
        System.out.println(cal.after(cal2));    // 結果: true
    }
}

実行結果:

false
false
true

カレンダーが同一であるとは、日付/時刻の値が同じであるだけでなく、タイムゾーンやロケールなどのカレンダー設定も同じであることを意味します。異なるカレンダーに対してequalsメソッドはfalseを返します。