Flexと xsd:date型
Flexが Webサービスを呼び出すとき、xsd:date型を引数に要求されると Dateオブジェクトの UTC表現を元に生成した日付文字列をサーバへ送信する。
参考文献:Flex 2: Hotfix 2 Webservice serialization changes
これだとロンドンより東に住んでいる我々にとって困ることがひとつある。mx:DateChooserや mx:DateFieldでユーザに選択させた日付の1日前の日付がサーバへポストされてしまうのだ。FlexのDate型は日付+時刻+タイムゾーン型なのだが、DateChooserで取り扱う場合時刻部分を 00:00:00.000、タイムゾーンをローカルに固定して「日付型」がわりにしているためだろう。
ソレジャコマルヨチミィー
Webサービス側の入力データ型を xsi:dateTimeにしてやれば、Flexからは日付+時刻+タイムゾーンがセットでサーバへ送信されるのでサーバ側できちんとタイムゾーンを解釈してくれれば問題ないはずなのだが、データベースとの絡みで簡単にはそうしてもらえないこともあり(スキーマ側で求められているのはDATE型だったりするし、ローレベルのDBドライバがタイムゾーンを正しく処理できるとは限らないのだ!)如何ともしがたい。仕方ないので送信前にUTCとのオフセット分だけ Dateオブジェクトの値をずらしてやるというアドホックなソリューションでしのいでみた。
ひでーなこりゃ。
参考文献:Flex 2: Hotfix 2 Webservice serialization changes
これだとロンドンより東に住んでいる我々にとって困ることがひとつある。mx:DateChooserや mx:DateFieldでユーザに選択させた日付の1日前の日付がサーバへポストされてしまうのだ。FlexのDate型は日付+時刻+タイムゾーン型なのだが、DateChooserで取り扱う場合時刻部分を 00:00:00.000、タイムゾーンをローカルに固定して「日付型」がわりにしているためだろう。
ソレジャコマルヨチミィー
Webサービス側の入力データ型を xsi:dateTimeにしてやれば、Flexからは日付+時刻+タイムゾーンがセットでサーバへ送信されるのでサーバ側できちんとタイムゾーンを解釈してくれれば問題ないはずなのだが、データベースとの絡みで簡単にはそうしてもらえないこともあり(スキーマ側で求められているのはDATE型だったりするし、ローレベルのDBドライバがタイムゾーンを正しく処理できるとは限らないのだ!)如何ともしがたい。仕方ないので送信前にUTCとのオフセット分だけ Dateオブジェクトの値をずらしてやるというアドホックなソリューションでしのいでみた。
date = new Date(
dateChooser.selectedDate.time
- dateChooser.selectedDate.timezoneOffset * 60 * 1000
);
ひでーなこりゃ。

0 件のコメント:
コメントを投稿
<< ホーム