日付差判定の基本概念
日付操作において、二つの日付が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("日付解析エラー");
}
}
}
この実装では絶対値を使用し、日付順序に依存しない判定を実現しています。