Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away