Javaにおける日付間隔の7日超過判定手法

日付差判定の基本概念

日付操作において、二つの日付が7日以上離れているかどうかを判定する処理は頻繁に発生します。この処理では日付のパース、時間計算、比較ロジックが重要となります。

日付文字列の解析処理

JavaではSimpleDateFormatクラスを用いて文字列を日付オブジェクトに変換します。以下に基本的な変換例を示します:

DateFormat dateFormatter = new SimpleDateFormat("yyyy/MM/dd");
String inputDate = "2023/05/15";
try {
    Date parsedDate = dateFormatter.parse(inputDate);
    System.out.println(parsedDate);
} catch (ParseException ex) {
    ex.printStackTrace();
}

フォーマットパターンは入力文字列と一致させる必要があり、不一致の場合ParseExceptionが発生します。

日付間隔の計算手法

日付オブジェクトを取得後、ミリ秒単位の差を計算して日数に変換します:

DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
String first = "2023/05/01";
String second = "2023/05/10";
try {
    Date start = formatter.parse(first);
    Date end = formatter.parse(second);
    long timeDifference = end.getTime() - start.getTime();
    long dayCount = timeDifference / (86400000); // 1日=86400000ミリ秒
    System.out.println("日数差: " + dayCount);
} catch (ParseException ex) {
    ex.printStackTrace();
}

ミリ秒から日数への換算では閏秒やタイムゾーンの影響を無視していますが、一般的な業務処理では十分な精度です。

7日超過判定の実装

計算した日数差を基に条件判定を行います:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
String initialDate = "2023/05/01";
String finalDate = "2023/05/10";
try {
    Date begin = dateFormat.parse(initialDate);
    Date terminate = dateFormat.parse(finalDate);
    long interval = terminate.getTime() - begin.getTime();
    long days = interval / 86400000;
    
    if(days > 7) {
        System.out.println("7日以上離れています");
    } else {
        System.out.println("7日以内です");
    }
} catch (ParseException ex) {
    ex.printStackTrace();
}

実用的な検証モジュール

再利用可能な検証メソッドの実装例:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateIntervalChecker {
    
    public static boolean exceedsOneWeek(String dateA, String dateB) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
        Date first = format.parse(dateA);
        Date second = format.parse(dateB);
        long gap = Math.abs(second.getTime() - first.getTime());
        return (gap / 86400000) > 7;
    }

    public static void main(String[] args) {
        String date1 = "2023/05/01";
        String date2 = "2023/05/09";
        
        try {
            if(exceedsOneWeek(date1, date2)) {
                System.out.println("7日超過");
            } else {
                System.out.println("7日以内");
            }
        } catch (ParseException e) {
            System.out.println("日付解析エラー");
        }
    }
}

この実装では絶対値を使用し、日付順序に依存しない判定を実現しています。

タグ: Java 日付処理 SimpleDateFormat 日付比較

7月10日 22:09 投稿