Calender と DateFormat

国際化機能の簡単な例として、日時の日本語表示の例を紹介します。
ここで紹介するのは、日時を日本語表示するサンプルプログラムです。 JDK1.02 でも、システムに依存する形でなら日本語の表示が可能でした。 JDK1.1 ではシステムによらずに日本語表示が可能になった点が重要です。 Solaris でも Windows でも Mac でも、日本語コードの種類に関係なく 日本語表示が可能です。

日時の表示に関しては、国際化対応した専用のクラスが用意されているため、 プログラマーは国際化された文字列やそのフォーマットについて直接取り扱う 必要はありません。ただし、表示を実行するまでに必要となる手続きは、 多少めんどうになります。
 JDK1.0 では、日時とその表示はすべて Date というクラスを通じて行い ました。JDK1.1 では、国際化機能を含めてさらに拡張された Calendar と いう名前のクラスが java.util パッケージに追加されました。 また、日時の表示を専用に扱うためのクラス DateFormat が java.text パッケージ に用意されています。また、言語環境とタイムゾーンを取り扱うための クラス Locale と TimeZone が java.util パッケージに追加されています。 システムの環境からこれらの情報をデフォルト値として使用する場合には 特に用意する必要はありません。 ただし、特定の言語環境を指定したり、複数の言語環境に対応するアプリケーション を開発する場合には、これらのクラスの取り扱いも必要となります。

国際化対応の日時の表示に必要なクラス
クラス名 働き 所属するパッケージ
Calendar 日時の情報の取得、設定 java.util
DateFormat 日時の表示の形式 java.text
Locale 言語環境の情報 java.util
TimeZone タイムゾーンの情報 java.util

プログラムの中で Calender 及び DataFormat を扱う方法を示します。


/** 言語環境に対応した時刻表示に必要なオブジェクト */

Calender cal = Calendar.getDefault();
Date date = cal.getTime();
DateFormat df = DateFormat.getDateTimeFormat( DateFormat.FULL,
                                              DateFormat.FULL );
String str = df.format( date );

Calendarクラスや DateFormatクラスはシステムおよび言語環境に依存します。 そのため、コンストラクタによって生成するのではなく、 クラス自身に用意された getDefault() のようなメソッドを用いて オブジェクトを受け取る形式になります。(Imageクラスなどと事情が似ています。)
 Calendar のオブジェクトから Date のオブジェクトを得るには、getTime()メソッド を用います。 Calendar の内部の情報は、そのオブジェクトが生成された時刻です。 自動的に更新はされませんから、時計などのプログラムでは、 一定時間ごとに繰り返しオブジェクトを生成する必要があります。
 DateFormat のオブジェクトは、必要な表示の形式を得るためにいくつかの手段が 用意されています。年月日の情報のみを得るには getDateFormat() を、 時刻の情報のみを得るには getTimeFormat() を、両方を同時に受け取るには getDateTimeFormat()を用います。それぞれのメソッドには、必要となるフィールド の情報を引数で渡すことができ、そのために int型のstatic定数が定義されて います。上の例では、年月日、時刻とも全てのフィールドを表示するために、 DateFormat.FULL を指定しています。 DateFormat のオブジェクトは、現在の時刻の情報を持ってはいません。 表示の文字列を生成する時に、 時刻の情報を Dateクラスのオブジェクトから受け取ります。 したがって、DateFormatのオブジェクトは一度生成するだけでかまいません。