はにまログ

「はにまる」のようにゆるーく生きたい。

2つの日付の差分を取得する

  • java.util.Calendarクラスを利用することで、予定日を簡単に設定できる。
  • 予定日と現在のCalendarインスタンスをミリ秒に変換し、差分をとる。(Calendar.compareというメソッドでも日付の比較はできるが、日付の大小をあらわだけで、日付の差分までは取得できない)
  • 差分をDateクラスとCalendarクラスを経由して、日数や時間に変換するが、Calendar.DAY_OF_YEARを利用することで手軽に月をまたいだ日数を取得できる。
// 現在の日付を取得する
Calendar cal_now = Calendar.getInstance();
// 予定の日付を取得する
Calendar cal_target = Calendar.set("2014","5","5","11","15","10");
// 残りの日数を割り出す
long diff = cal_target.getTimeInMillis() - cal_target.getTimeInMillis();
Date diff_date = new Date(diff);
Calendar cal_diff = Calendar.setTime(diff_date);
System.out.println(
    cal_diff.get(Calendar.DAY_OF_YEAR)
    + "日" 
    + cal_diff.get(Calendar.HOUR) 
    + "時間" 
    + cal_diff.get(Calendar.MINUTE)  
    + "分" 
    + cal_diff.get(Calendar.SECOND) 
    + "秒"
);

ただし、Calendar.DAY_OF_YEARは、指定した日が1年の何日めかを取得するので、差分が1年を超える場合には使えない。一年以上先の予定まで登録されることを考慮するなら、残日数をミリ秒から直接算出する。

long diff_day = ( diff ) / (1000 * 60 * 60 * 24 );