Javaで2つの月(Date)の差分月数を取得する方法

java

2つの日付間で何ヶ月開きがあるか、差分月数を算出する方法です。
差分日数や差分時間を算出する方法とは少しことなる方法で、差分月数は算出していきます。

差分日数を算出する方法は過去にコチラで紹介しています。

[スポンサーリンク]

差分月数を取得するプログラム

こちらプラグラムは、YYYYMMDDのDD部分は無視しています。
例えば、2013/08/01と2014/08/02の差分は12ヶ月と1日ですが、端数の1日は無視されるプログラムです。

public static void main( String[] args ) throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    
    Date frome = DateFormat.getDateInstance().parse("2013/08/01 13:00:00");
    Date to = DateFormat.getDateInstance().parse("2014/08/02 13:00:00");
    
    Calendar calFrom = Calendar.getInstance();
    calFrom.setTime(frome);
    calFrom.set(Calendar.DATE, 1);
    
    Calendar calTo = Calendar.getInstance(); 
    calTo.setTime(to);
    calTo.set(Calendar.DATE, 1);
    
    int count = 0;
    while (calFrom.before(calTo)) {
        calFrom.add(Calendar.MONTH, 1);
        count++;
    }

    System.out.println( "日数(FROM) : " + sdf.format(frome) );
    System.out.println( "日数(TO) : " + sdf.format(to) );
    System.out.println( "差分月数 : " + count );
}

実行結果

>実行結果
日数(FROM) : 2013/08/01 00:00:00
日数(TO) : 2014/08/02 00:00:00
差分月数 : 12

端数の日数も月にカウントしたい場合

上でも書きましたが、2013/08/01と2014/08/02の差分は12ヶ月と1日です。この1日も1ヶ月としてカウントするプログラムはこちらになります。

public static void main( String[] args ) throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    
    Date frome = DateFormat.getDateInstance().parse("2013/08/01 13:00:00");
    Date to = DateFormat.getDateInstance().parse("2014/08/02 13:00:00");
    
    Calendar calFrom = Calendar.getInstance();
    calFrom.setTime(frome);
    //calFrom.set(Calendar.DATE, 1);
    
    Calendar calTo = Calendar.getInstance(); 
    calTo.setTime(to);
    //calTo.set(Calendar.DATE, 1);
    
    int count = 0;
    while (calFrom.before(calTo)) {
        calFrom.add(Calendar.MONTH, 1);
        count++;
    }

    System.out.println( "日数(FROM) : " + sdf.format(frome) );
    System.out.println( "日数(TO) : " + sdf.format(to) );
    System.out.println( "差分月数 : " + count );
}

実行結果

>実行結果
日数(FROM) : 2013/08/01 00:00:00
日数(TO) : 2014/08/02 00:00:00
差分月数 : 13

さいごに

冒頭でも書きました通り、差分日数と差分月数を算出する方法は異なってきますので気をつけましょう。
もし差分年数を算出したい場合は、差分月数と似たような方法で算出します。

それでは!