すぐに思いつくのは、java.text.SimpleDateFormat クラスだ。 このクラスは、フォーマット文字列を使って日時文字列のパターンを指定できる。 例えば、次のような具合だ。
問題は、XML Schema datetime 型(xs:datetime と表記する)と Java SimpleDateFormat ではタイムゾーンの表記が異なることである。"-04:00" と "-0400" で ':' の有無が異なり、SimpleDateFormat オブジェクトでは xs:datetime の値をパースできない。
先達の方法を検索してみると、パース前に ':' を削除する、という方法があった。さらに調べると、Java 1.5 で導入された XMLGregorianCalendar クラスがあるではないか!
以下のように、アブストラクトファクトリを使ってインスタンスを生成する。妥当な xs:datetime 型の値であれば、タイムゾーンのない短い表記でも問題なくパースできる。
さて、速度とメモリ使用量はどうだろうか?
リソース:
- javax.xml.datatype.XMLGregorianCalendar - http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/datatype/XMLGregorianCalendar.html
- java.text.SimpleDateFormat - http://docs.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html
- XML Schema Part 2: Datatypes Second Edition, W3C Recommendation 28 October 2004, 3.2.7 dateTime, http://www.w3.org/TR/xmlschema-2/#dateTime