Android 日付を扱う

この記事は2016年2月23日に書かれたものです。内容が古い可能性がありますのでご注意ください。


アプリを開発していると日付を扱いたいシーンは多いと思います。

本稿ではAndroidで日付をの取得や表示について説明します。

現在の日時を取得する

時間を表すクラスとしてjava.util.Datejava.util.Calendarがあります。

Dateクラスは「ある特定の時点」を表すためのクラスです。
単純比較や、オブジェクト間で「特定の時点」の情報を受け渡しをする場面では適していますが、
日付や時刻の「値」を扱うことはできません。(値として取り出すメソッドはあるが非推奨)
また、Dateオブジェクトはタイムゾーンの情報を持ちません。

CalendarクラスはDateオブジェクトと年、月、日や、時、分の整数値の間を取り持ち変換するためのクラスです。Calendarはロケールとタイムゾーンの違いに対応しています。

端末の現在の日時およびその値を取得したい場合はCalnedarクラスを用いる必要があります。

Calendar rightNow = Calendar.getInstance();

Calendarは抽象クラスなのでstaticメソッドであるgetInstance()を呼びましょう。
端末設定のロケールに基づいた現在日時のフィールドをもつCalendarオブジェクトが取得できます。

値の取得

Calendarオブジェクトから値を取得するにはCalendar#get(int field)を用います。
引数のfieldにはCalendarクラスの定数を与えます。ここでは主な値を取り上げます。

年・月・日は順に

calendar.get(Calendar.YEAR);
calendar.get(Calendar.MONTH);
calendar.get(Calendar.DAY_OF_MONTH);

ここでMONTHを扱う際には、get(Calendar.MONTH)返り値は0~11であることに注意しましょう。
つまり、値が0ならば1月、1ならば2月、2ならば3月・・・を表すということです。

時・分・秒は順に

calendar.get(Calendar.HOUR);
calendar.get(Calendar.MINUTE);
calendar.get(Calendar.SECOND);

HOURは12時間表記の値です。24時間表記の値を用いたい場合はCalendar.HOUR_OF_DAYを引数にとります。

Date → Calendar ,  Calendar → Date

DateオブジェクトをCalendarオブジェクトに変換はCalendar#getTimeメソッドで行えます。

Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();

逆にCalendarオブジェクトをDateオブジェクトに変換は以下のように行います。

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

 

文字列への変換

ユーザへ表示する際には適切な文字列に変換する必要があります。
日付文字列の変換はandroidに標準で用意されている、android.text.format.DateFormatを用います。
staticメソッドであるandroid.text.format.DateFormat#getDateFormat()(求める表記に応じてandroid.text.format.DateFormat#getMediumDateFormat()、
android.text.format.DateFormat#getLongDateFormat())を用いてフォーマットを取得し変換します。
これにより端末のロケールに応じた文字列表記を得られます。

DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
String dateText = dateFormat.format(Calendar.getInstance().getTime());

*ややこしいのですが、android.text.format.DateFormat.getDateFormat()の返り値はjava.text.DateFormatオブジェクトです。パッケージimportでは留意しましょう。

また、時間を文字列にして表示したい場合はandroid.text.format.DateFormat#getTimeFormat()で同様にフォーマットを取得して行えます。

独自フォーマットパターンで文字列に変換する

独自に定義した表記方法を用いたい場合はandroid.text.format.DateFormat#format()を用います。

CharSequence dateText  = android.text.format.DateFormat.format("yyyy/MM/dd kk:mm:ss", Calendar.getInstance());

第一引数に文字列パターン、第二引数にCalendarオブジェクト(Dateオブジェクトでも可)を与えます。

 
android開発での日時の扱いの説明は以上です。

  • このエントリーをはてなブックマークに追加

PAGE TOP