はじめに
日付/時間を扱うAPIには
- 日付のみを保持する
LocalDate - 時刻のみを保持する
LocalTime - 日付と時刻の両方を保持する
LocalDateTime
があり、やりたいことに合わせて適切なAPIを使うわけですが、
日数の差分を取得するためには、LocalDateTimeで日付を比較する方法がスマートだと感じたので、ここにメモしておきます。
※なお、「日付」の比較ということで当初はLocalDateのcompareToメソッドを使っていたのですが、下記記事に書いた通り、意図しない結果になることがありました。
【Kotlin】LocalDateで2つの日付を比較し、日数の差分を取得する - Qiita
【Android】LocalDate#compareToで日付を比較する際の注意点 - Qiita
コード
非常にシンプルで、ChronoUnit.DAYS.betweenを使うことで日数の差分が取得できます。
(LocalDateTimeとChronoUnitはThreeTenABPライブラリのものを使っています。)
val now = LocalDateTime.now() //2019-07-28T15:31:59.754
val day1 = LocalDateTime.parse("2019-08-28T10:15:30.123")
val diff = ChronoUnit.DAYS.between(now, day1) // diff: 30
ChronoUnitとは
ChronoUnitは日付、時間などを操作するための「単位」を集めた列挙型です。
1日の概念を表すDAYSの他にも、1時間の概念を表すHOURS、1マイクロ秒の概念を表すMICROS、1世紀の概念を表すCENTURIESなど、多くの単位が定義されています。
詳細:ChronoUnit (Java Platform SE 8)