Java での 2 つの日付または 2 つの時間の差の計算を扱う SO の質問はたくさんあります。多くの回答がコア Java Date クラスの問題を指摘し、Jodatime の使用を提案していますが、私の知る限り、jsr310 を使用してこれを行う方法を提案するものはありません。
では、jsr310 で 2 つの日付または 2 つの時刻の差を計算する方法はありますか?
参考までに、次の質問でこの問題を処理します。
コア Java では:
ジョダタイムでは:
Java での 2 つの日付または 2 つの時間の差の計算を扱う SO の質問はたくさんあります。多くの回答がコア Java Date クラスの問題を指摘し、Jodatime の使用を提案していますが、私の知る限り、jsr310 を使用してこれを行う方法を提案するものはありません。
では、jsr310 で 2 つの日付または 2 つの時刻の差を計算する方法はありますか?
参考までに、次の質問でこの問題を処理します。
コア Java では:
ジョダタイムでは:
これを行う方法は、使用されている日付または日時クラスによって異なります。
Instant
リアルタイムで操作している場合(つまり、タイムゾーンなどを使用して日時をタイムライン上で正確に特定できる場合)、Duration
クラス(javadoc)を使用できます-例
Duration diff = Duration.between(InstantProvider startInc, InstantProvider endInc);
InstantProvider が可能な場所
あるいは、仮の時間 (つまり、タイムゾーンなどなし) で操作している場合は、Period
クラス ( javadocLocalDate
) を使用して、2 つのインスタンスの差を取得できます。
// diff in days, months and years:
Period diff = Period.between(LocalDate start, LocalDate end);
// diff in days:
Period diff = Period.daysBetween(LocalDate start, LocalDate end);
ただし、2 つの LocalDateTimes または LocalTimes の差を取得するための便利な方法は知りません。しかし...これは、次のように Period を使用して実行できます。
// diff between LocalDateTimes:
public static Period between(LocalDateTime start, LocalDateTime end){
return Period.of(
end.getYear()-start.getYear(),
end.getMonthOfYear().getValue()-start.getMonthOfYear().getValue(),
end.getDayOfMonth()-start.getDayOfMonth(),
end.getHourOfDay()-start.getHourOfDay(),
end.getMinuteOfHour()-start.getMinuteOfHour(),
end.getSecondOfMinute()-start.getSecondOfMinute(),
end.getNanoOfSecond()-start.getNanoOfSecond()
);
}
// diff between LocalTimes:
public static Period between(LocalTime start, LocalTime end){
return Period.of(0, 0, 0,
end.getHourOfDay()-start.getHourOfDay(),
end.getMinuteOfHour()-start.getMinuteOfHour(),
end.getSecondOfMinute()-start.getSecondOfMinute(),
end.getNanoOfSecond()-start.getNanoOfSecond()
);
}