java.textパッケージのSimpleDateFormatは、日付のフォーマットと解析を、ロケールを考慮して行うための具象クラスです。このクラスを用いて、日付時刻データからテキストへのフォーマット、テキストから日付時刻への解析、そして正規化を行えます。
SimpleDateFormatクラスを使って、日付時刻フォーマットのユーザー定義パターンを選択することによって、日付のフォーマットと解析が「取りあえず」できます。しかし、J2SEのAPI仕様ドキュメントでは、できるだけ、スーパークラスであるDateFormatクラスのクラスメソッドであるgetTimeInstance(…)、getDateInstance(…)、または getDateTimeInstance(…)で日付時刻フォーマッタを作成することを推奨しています。
DateFormatクラスは、言語に依存しない方法で日付または時刻をフォーマットおよび解析する、日付・時刻フォーマットサブクラスのスーパークラスです。抽象クラスですが、これらのメソッドは実装されており、どれもデフォルトフォーマットパターンで初期化された日付時刻フォーマッタを返せます。
一例として、複数の日付を複数のパターン(言語と形式)でフォーマットするプログラムを示します。
このプログラムでは、配列に格納した2つの日付を対象にして2通りのフォーマットを行っています。取得した日付時刻フォーマッタを使い回すことで効率を上げています。
さらに、解析のためにDateFormatを使用できます。また、ParsePositionと一緒に使用すれば、文字列のそれぞれの部分を段階的に解析することも可能です。
一例として、複数の文字列を日付時刻フォーマッタで解析するプログラムを示します。
このプログラムでは、配列に格納した2つの文字列を対象にして2パターンの解析を行っています。
最初に、文字列全体をフランスのロケール、長いスタイルで解析し、成功したら解析結果をデフォルトのロケール、スタイルでフォーマットして出力します。
解析が失敗した場合、スローされる例外をキャッチして、今度はParsePositionクラスを用いて、部分文字列による再解析を行っています。
この例では、「FRA 17 janvier 2007」は解析不能ですが、先頭を0けた目とした場合の3けた目以降である「 17 janvier 2007」、4けた目以降である「17 janvier 2007」は解析可能です。5けた目以降である「7 janvier 2007」も解析可能ですが、結果が異なってしまいます。
なお、今回も、取得した日付時刻フォーマッタを使い回すことで効率を上げています。
Copyright © ITmedia, Inc. All Rights Reserved.