はじめに
最終回の本稿は、基本的なJava APIで、これまでとりあげていなかった日付や時間を操作するAPIを紹介します。
なおAndroid SDKに含まれる基本APIは、現行のJava SE 6とまったく同じというわけではありません。API Levelが低いと、Java SE 6に含まれるクラスやメソッドの一部が実装されていない場合があります。
API Levelの微妙な違いは、Android Developersサイトで確認するようにしてください。
対象読者
Androidアプリケーションの開発を始めたい方で、JavaとEclipseのごく基本的な知識がある方を対象とします。
日付、時間処理の基本
Javaで日付や時刻をあつかうための基本となるクラスは、java.util.Dateとjava.util.Calendarクラスです。
java.util.Dateクラスは、特定の日付と時刻を保持するためのクラスです。保持する値は、エポックと呼ばれるグリニッジ標準時の1970年1月1日00:00:00から起算したミリ秒となっています。
ただ現行のJavaでは、このクラスのメソッドを使うことはあまりありません。ほとんどのメソッドが非推奨となっており、通常は国際化に対応したjava.util.Calendarクラスや日付表示用のクラスを利用します。
Calendarクラスは、さまざまな言語や地域の日付、時刻の変換機能に対応する抽象クラスです。異なる暦に対しても、共通のAPIが提供されています。
java.util.Calendarクラスの使い方
Calendarオブジェクトは抽象クラスなので、インスタンスの生成はコンストラクタを使用せずに、getInstanceメソッドを使用します。getInstanceメソッドは、指定されたロケールまたはタイムゾーンに対応したCalendarオブジェクトを返します。ロケールとは、ある地域の国や言語といった情報のことです。
引数がない場合は、現在のシステム時刻を示すデフォルトのCalendarオブジェクトが返されます。なおデフォルトのCalendarオブジェクトは、Calendarの具象サブクラスであるGregorianCalendarクラスのインスタンスとなっています。このクラスは、世界のほとんどの地域で使用される標準的なカレンダです。
では、DateクラスとCalendarクラスを使って、現在日時を表示してみましょう。今回も、テキストビューを使って、文字を表示しています。
ソースファイルは、次のようになっています。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/parent" > </LinearLayout>
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sample1(); } // 文字列の1行表示 public void printString(String s) { // ベースのレイアウト取得 LinearLayout parent = (LinearLayout) findViewById(R.id.parent); TextView tv = new TextView(this); tv.setTypeface(Typeface.MONOSPACE); // 等幅フォントの指定 tv.setText(s); parent.addView(tv); // ビューの追加 } public void sample1() { // Dateクラスによる現在時表示 Date date = new Date(); printString("Date: " + date.toString()); // デフォルトのCalendarオブジェクト Calendar cal = Calendar.getInstance(); // 実装クラス名表示 printString(cal.getClass().getName()); // Calendarクラスによる現在時表示 String tmp = "Calendar: " + cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND); printString(tmp); }
Dateクラスでは、toStringメソッドで、日時を文字列に変換できます。
Calendarクラスでは、getメソッドにより日時の各値を取得して表示しています。getメソッドの引数には、日時のフィールドを示す定数を指定します。この定数は、Calendarクラスで定義されており、主な定数は以下のとおりです。
定数名 | 説明 |
YEAR | 年 |
MONTH | 月 |
DATE、DAY_OF_MONTH | 月の日 |
HOUR_OF_DAY | 24時間制の時刻 |
AM_PM | 午前か午後 |
HOUR | 12時間制の時刻 |
MINUTE | 分 |
SECOND | 秒 |
MILLISECOND | ミリ秒 |
DAY_OF_WEEK | 曜日 |