TL;DR
- java.util.Dateとjava.util.Calendarは死んだ
- 今から日付処理が必要なアプリを作るならJakeWharton/ThreeTenABP
- Joda-Timeとdate4jの違いDate4j- 日付を扱う最小限のライブラリ -InfoQ
はじめに
現状Androidで使えるjava.util.Date
とjava.util.Calendar
を使った日付処理は色々つらいので、ライブラリを使うことになると思います。いざ導入しようと思ったら色々あたので、簡単に試してみました。
各ライブラリ導入方法とか
joda-time-android
JavaではデファクトスタンダードとなっているJoda-TimeをAndroidに最適化したライブラリ
1.build.gradleのdependenciesに下記を追加
dependencies {
compile 'net.danlew:android.joda:2.9.2'
}
2.Applicationクラスをextendsして初期化を追加
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
JodaTimeAndroid.init(this);
}
}
2つの日付の間が何日間か求める
DateTime from = new DateTime("2012-04-18T20:00:00");
DateTime to = new DateTime("2014-5-18T10:00:00");
Duration duration = new Duration(from, to);
duration.getStandardDays()
System.out.println(duration.getStandardDays() + "日");
date4j
Joda-Timeはtoo fatなので必要な部分だけ残したライブラリ(Androidに最適化されているわけではない)
1.build.gradleのdependenciesに下記を追加(Applicationクラスでの初期化はいらない
dependencies {
compile 'net.danlew:android.joda:2.9.2'
}
2つの日付の間が何日間か求める
DateTime from = new DateTime(2012, 4, 18, 20, 0, 0, null);
DateTime to = new DateTime(2014, 5, 18, 10, 0, 0, null);
System.out.println(from.numDaysFrom(to) + "日");
ThreeTenABP
まだAndroidではサポートされてないJavaの日付処理APIをバックポートしたThreeTenBPをAndroid向けに最適化したライブラリ
1.build.gradleのdependenciesに下記を追加
dependencies {
compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'
}
2.Applicationクラスをextendsして初期化を追加
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
AndroidThreeTen.init(this);
}
}
2つの日付の間が何日間か求める
ZonedDateTime from = ZonedDateTime.parse("2012-04-18T20:00:00+09:00[Asia/Tokyo]");
ZonedDateTime to = ZonedDateTime.parse("2014-05-18T10:00:00+09:00[Asia/Tokyo]");
System.out.println(Duration.between(from, to).toDays() + "日");
おわりに
どれも導入は簡単だし、クラスやメソッドもだいぶ直感的でした。
しかしこれから使うのだとすればThreeTenABPになるだろうなと思います。
今後AndroidがJava8をサポートした場合に改めて使い方を学ぶ必要がなさそうですし。