概要
例えば 2008/9/23 〜 今日 の間って, 何日間?何ヶ月間?何年間?
みたいなことをJava/KotlinのDateとかCalenderを使ってやろうとすると,日付をUnixTimeに直して引き算してさらにパースし直して・・・,となります.
そんな時に活躍するのが LocalDate
なのですが,これがなんとminSdk26以上と手厳しい.
これが今回解決する課題です.
(ちなみに 2008/9/23 はAndroid1.0が出た日なのです)
解決策
なんとあのJakeWharton神が,このAndroid用のバックポートライブラリを作ってくれているのです.
ThreeTen Android Backport
https://github.com/JakeWharton/ThreeTenABP
これを使うことで,minSdkを気にせずLocalDateを使用することができます.
使い方
まず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と同じですので,そちらを見ると良いでしょう.
これでUnixTimeに戻して・・・なんてやらなくても大丈夫ですね!
お疲れ様でした.