DurationとPeriod
型安全なDurationとPeriodで時間差を計算する。
コード比較
✕ Pre-Java 8
// How many days between two dates?
long diff = date2.getTime()
- date1.getTime();
long days = diff
/ (1000 * 60 * 60 * 24);
// ignores DST, leap seconds
✓ Java 8+
long days = ChronoUnit.DAYS
.between(date1, date2);
Period period = Period.between(
date1, date2);
Duration elapsed = Duration.between(
time1, time2);
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
型安全
時間にはDuration、日付にはPeriodと役割が明確で混乱しません。
正確な計算
サマータイムの移行、うるう年、うるう秒を正しく処理します。
読みやすさ
ChronoUnit.DAYS.between()は英語のように読めます。
旧来のアプローチ
ミリ秒演算
モダンなアプローチ
Duration / Period
JDKバージョン
8
難易度
初級
JDKサポート
DurationとPeriod
利用可能
JDK 8(2014年3月)以降、広く利用可能
仕組み
Durationは時間ベースの量(時・分・秒)、Periodは日付ベースの量(年・月・日)に使います。ChronoUnit.between()は単純な差の計算に便利です。いずれもエッジケースを正しく処理します。
関連ドキュメント