日付の比較
日付の比較は書式がYYYY/MM/DDや、YYYYMMDDといったように、比較する書式が同じであれば文字列比較のcompareToで可能です。
compareToについてはString同士の大小比較を御覧下さい。

Calendarクラスで比較する場合、グレゴリオ暦からの経過ミリ秒で判断します。
以下、例です。

package jp.co.confrage;

import java.util.Calendar;

public class Test002 {

    public static void main(String[] args) {
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();

        cal1.set(2011,0,1);
        cal2.set(2011,0,2);

        if(cal1.compareTo(cal2) == 0){
            System.out.println("同一日付です");
        }else{
            System.out.println("同一日付ではありません");
        }
    }
}
Calendarクラスのコンストラクタはprotectedされているため、newできません。上記のようにファクトリメソッドよりインスタンス生成します。

日付の計算
文字列型の日付計算を行うにはCalendarクラスとSimpleDataFormatクラスで計算可能です。

Calendar cal = Calendar.getInstance();
Calendarクラスのインスタンスを生成し、setメソッドを使用します。

Calendar cal = Calendar.getInstance();
cal.set(2011,0,1);
これで20110101をセットしたことになります。年月日の順でセットしますが、月だけ0~11になります。
ここから3日マイナス計算したい場合

Calendar cal = Calendar.getInstance();
cal.set(2011,0,1);
cal.add(Calendar.DATE,-3);
これでマイナス3日しています。あとはcalendar.getTime()で日付取得することができます。

以下、例です。

String ymd = "20110101";
Calendar cal = Calendar.getInstance();
cal.set(Integer.parseInt(ymd.substring(0,4)),
        Integer.parseInt(ymd.substring(4,6)) - 1,
        Integer.parseInt(ymd.substring(6,8)));
cal.add(Calendar.DATE,-3);

SimpleDataFormat sdf = new SimpleDataFormat("yyyyMMdd");
String date = sdf.format(calendar.getTime());
System.out.println(date);

Back to top

Information