言語に依存しない方法で日付・時刻をフォーマットJavaTips 〜Javaプログラミング編

» 2007年01月24日 10時00分 公開
[平野正喜@IT]

 java.textパッケージのSimpleDateFormatは、日付のフォーマットと解析を、ロケールを考慮して行うための具象クラスです。このクラスを用いて、日付時刻データからテキストへのフォーマット、テキストから日付時刻への解析、そして正規化を行えます。

 SimpleDateFormatクラスを使って、日付時刻フォーマットのユーザー定義パターンを選択することによって、日付のフォーマットと解析が「取りあえず」できます。しかし、J2SEのAPI仕様ドキュメントでは、できるだけ、スーパークラスであるDateFormatクラスのクラスメソッドであるgetTimeInstance(…)、getDateInstance(…)、または getDateTimeInstance(…)で日付時刻フォーマッタを作成することを推奨しています。

 DateFormatクラスは、言語に依存しない方法で日付または時刻をフォーマットおよび解析する、日付・時刻フォーマットサブクラスのスーパークラスです。抽象クラスですが、これらのメソッドは実装されており、どれもデフォルトフォーマットパターンで初期化された日付時刻フォーマッタを返せます。

DateFormatを使用したフォーマット

 一例として、複数の日付を複数のパターン(言語と形式)でフォーマットするプログラムを示します。

図1 複数の日付をデフォルトのロケール、デフォルトのスタイル、及びフランスのロケール、長いスタイルでフォーマットするプログラム 図1 複数の日付をデフォルトのロケール、デフォルトのスタイル、およびフランスのロケール、長いスタイルでフォーマットするプログラム

 このプログラムでは、配列に格納した2つの日付を対象にして2通りのフォーマットを行っています。取得した日付時刻フォーマッタを使い回すことで効率を上げています。

DateFormatを使用した解析

 さらに、解析のためにDateFormatを使用できます。また、ParsePositionと一緒に使用すれば、文字列のそれぞれの部分を段階的に解析することも可能です。

 一例として、複数の文字列を日付時刻フォーマッタで解析するプログラムを示します。

図2 複数の文字列をフォーマットで解析し、解析結果を別のフォーマットで出力するプログラム 図2 複数の文字列を日付時刻フォーマッタで解析し、解析結果を別のフォーマットで出力するプログラム

 このプログラムでは、配列に格納した2つの文字列を対象にして2パターンの解析を行っています。

 最初に、文字列全体をフランスのロケール、長いスタイルで解析し、成功したら解析結果をデフォルトのロケール、スタイルでフォーマットして出力します。

 解析が失敗した場合、スローされる例外をキャッチして、今度はParsePositionクラスを用いて、部分文字列による再解析を行っています。

 この例では、「FRA 17 janvier 2007」は解析不能ですが、先頭を0けた目とした場合の3けた目以降である「 17 janvier 2007」、4けた目以降である「17 janvier 2007」は解析可能です。5けた目以降である「7 janvier 2007」も解析可能ですが、結果が異なってしまいます。

 なお、今回も、取得した日付時刻フォーマッタを使い回すことで効率を上げています。

Profile

RunDog.org

平野正喜


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。