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

java

2つの日付間で何年開きがあるか、差分年数を算出する方法です。
以前紹介しました差分月数を取得する方法と同じような方法で算出します。

[スポンサーリンク]

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

こちらプラグラムは、YYYYMMDDのMMDD部分は無視しています。
例えば、2013/08/01と2015/08/02の差分は2年と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("2015/08/02 13:00:00");
    
    Calendar calFrom = Calendar.getInstance();
    calFrom.setTime(frome);
    calFrom.set(Calendar.DAY_OF_MONTH, 1);
    calFrom.set(Calendar.DATE, 1);
    
    Calendar calTo = Calendar.getInstance(); 
    calTo.setTime(to);
    calFrom.set(Calendar.DAY_OF_MONTH, 1);
    calTo.set(Calendar.DATE, 1);
    
    int count = 0;
    while (calFrom.before(calTo)) {
        calFrom.add(Calendar.YEAR, 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) : 2015/08/02 00:00:00
差分年数 : 2

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

上でも書きましたが、2013/08/01と2015/08/02の差分は2年と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("2015/08/02 13:00:00");
    
    Calendar calFrom = Calendar.getInstance();
    calFrom.setTime(frome);
    //calFrom.set(Calendar.DAY_OF_MONTH, 1);
    //calFrom.set(Calendar.DATE, 1);
    
    Calendar calTo = Calendar.getInstance(); 
    calTo.setTime(to);
    //calFrom.set(Calendar.DAY_OF_MONTH, 1);
    //calTo.set(Calendar.DATE, 1);
    
    int count = 0;
    while (calFrom.before(calTo)) {
        calFrom.add(Calendar.YEAR, 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) : 2015/08/02 00:00:00
差分年数 : 3

さいごに

実は年の差分を取得するプログラムって今まであまりみたことがありません。あまり需要がないのでしょうか。とはいえ年齢を計算する時などには役に立つプログラムなのかもしれません。

それでは!