Javaで経過日数を計算したい場合、もっともシンプルなのはLocalDate
とChronoUnit
を利用するものです。
public static long diff(LocalDate localDate1, LocalDate localDate2) {
return ChronoUnit.DAYS.between(localDate1, localDate2);
}
しかしライブラリや開発環境の都合上、Date
やCalendar
を利用せねばならないということもあります。この場合、Date
やCalendar
をLocalDate
に変換してしまうのがもっともわかりやすいと思います。
public static long diff(Date date1, Date date2) {
LocalDate localDate1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate localDate2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
return ChronoUnit.DAYS.between(localDate1, localDate2);
}
public static long diff(Calendar calendar1, Calendar calendar2) {
LocalDate localDate1 = calendar1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate localDate2 = calendar2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
return ChronoUnit.DAYS.between(localDate1, localDate2);
}
利用しているJavaのバージョンやコーディングルールなどにより、そもそもLocalDate
の利用ができない場合は、おとなしく秒数から計算しましょう(´・ω・`)
public static long diff(Date date1, Date date2) {
long time1 = date1.getTime();
long time2 = date2.getTime();
return Math.abs(time1-time2) / (1000*60*60*24);
}
public static long diff(Calendar calendar1, Calendar calendar2) {
long time1 = calendar1.getTimeInMillis();
long time2 = calendar2.getTimeInMillis();
return Math.abs(time1-time2) / (1000*60*60*24);
}
環境情報
D:\>javac --version
javac 11.0.10
D:\>java --version
openjdk 11.0.10 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)