はじめに
日付/時間を扱う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)