LoginSignup
5
3

More than 3 years have passed since last update.

[Android] 2つの日付の差分を簡単に計算する

Posted at

概要

例えば 2008/9/23今日 の間って, 何日間?何ヶ月間?何年間?

みたいなことをJava/KotlinのDateとかCalenderを使ってやろうとすると,日付をUnixTimeに直して引き算してさらにパースし直して・・・,となります.

そんな時に活躍するのが LocalDate なのですが,これがなんとminSdk26以上と手厳しい.
これが今回解決する課題です.
スクリーンショット 2019-04-30 0.13.03.png

(ちなみに 2008/9/23 はAndroid1.0が出た日なのです)

解決策

なんとあのJakeWharton神が,このAndroid用のバックポートライブラリを作ってくれているのです.

ThreeTen Android Backport
https://github.com/JakeWharton/ThreeTenABP

これを使うことで,minSdkを気にせずLocalDateを使用することができます.

使い方

まずGradleに下記を記述します.

app/build.gradle
dependencies {
    ...
    implementation 'com.jakewharton.threetenabp:threetenabp:1.2.0'
}

これにより,
java.time.LocalDate
に存在したLocalDateに加え,
org.threeten.bp.LocalDate
が使用可能になりました.こちらを使います.

たとえば 2008/9/23 〜 今日(執筆:2019/4/30) 間の差分日数・月数・年数を調べてみましょう.

val androidFirstRelease = LocalDate.of(2008, Month.SEPTEMBER, 23)
val today = LocalDate.now()  // 2019/4/30
val period = Period.between(androidFirstRelease, today) 

> period.days -> 7
> period.months -> 7
> period.years -> 10

// java.time.Month ではなく org.threeten.bp.Month を使うことに注意

となり,Androidのファーストリリースから10年7ヶ月7日経っていることがわかりました.

LocalDateの使い方は基本的にJava8に乗っているデフォルトのLocalDateと同じですので,そちらを見ると良いでしょう.

覚えたら書く - java.time.LocalDate

これでUnixTimeに戻して・・・なんてやらなくても大丈夫ですね!
お疲れ様でした.

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3