xml schema での datetime の扱い

Time Zones

To specify a time zone, you can either enter a dateTime in UTC time by adding a "Z" behind the time - like this:
<startdate>2002-05-30T09:30:10Z</startdate>

http://www.w3schools.com/Schema/schema_dtypes_date.asp

soap でやり取りしてる datetime 型が、送信した時刻から9時間ずれて送信されるーー、という事象。

実はずれているのではなく、末尾に 'Z' が付与されている場合、GMTタイムゾーンとして取り扱われているだけ。

特に難しい話ではなさそうなのだが、時にややこしい。

<birthday xsi:type="xsd:dateTime">1971-02-01T15:00:00.000Z</birthday>

この人は、JST では 2月2日が誕生日。だけど、datetime 型でそれを送信する場合、年月日情報に単純に時分秒を0で埋めて、

1971-02-01 00:00:00

JST で設定すると、soap では、GMT(1971-02-01 15:00) で送信される場合がある。二つは同じ意味なので何の問題も無いのだが、timezone の認識が無いとハマる原因になる。

「誕生日」や「カード有効期限」なんかの時分秒までの精度が無い情報は文字列として最初から取り扱ったほうが安全そうだ。


で、疑問点。タイムゾーンの指定(Z とか、-9:00 とか)は optional のようだが、この指定をしない場合、そのデータは GMT として扱われるのだろうか?実装依存なのか、XML Schema で定められているのか、今のところ見つけられていない。