Posted at

Androidで使える日付処理系のライブラリーを試してみた

More than 3 years have passed since last update.


TL;DR


はじめに

現状Androidで使えるjava.util.Datejava.util.Calendarを使った日付処理は色々つらいので、ライブラリを使うことになると思います。いざ導入しようと思ったら色々あたので、簡単に試してみました。


各ライブラリ導入方法とか


joda-time-android

JavaではデファクトスタンダードとなっているJoda-TimeをAndroidに最適化したライブラリ

1.build.gradleのdependenciesに下記を追加


build.gradle

dependencies {

compile 'net.danlew:android.joda:2.9.2'
}

2.Applicationクラスをextendsして初期化を追加


MyApp.java

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クラスでの初期化はいらない


build.gradle

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に下記を追加


build.gradle

dependencies {

compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'
}

2.Applicationクラスをextendsして初期化を追加


MyApp.java

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をサポートした場合に改めて使い方を学ぶ必要がなさそうですし。