2012-11-06

XML datetime and Java Date

XML Schema datetime 型の値を Java プログラムで扱う場合、どうすればよいか? 例えば、"2012-09-25T18:55:00.753-04:00" という文字列である。 

すぐに思いつくのは、java.text.SimpleDateFormat クラスだ。 このクラスは、フォーマット文字列を使って日時文字列のパターンを指定できる。 例えば、次のような具合だ。


問題は、XML Schema datetime 型(xs:datetime と表記する)と Java SimpleDateFormat ではタイムゾーンの表記が異なることである。"-04:00" と "-0400" で ':' の有無が異なり、SimpleDateFormat オブジェクトでは xs:datetime の値をパースできない。


先達の方法を検索してみると、パース前に ':' を削除する、という方法があった。さらに調べると、Java 1.5 で導入された XMLGregorianCalendar クラスがあるではないか!

以下のように、アブストラクトファクトリを使ってインスタンスを生成する。妥当な xs:datetime 型の値であれば、タイムゾーンのない短い表記でも問題なくパースできる。


さて、速度とメモリ使用量はどうだろうか?


リソース: