[Gson]日付文字列をDate型に変換する場合はタイムゾーンに注意

Gson2.2
CloudSearchにsearchをかけた結果のJsonをGson使ってJavaオブジェクトにデシリアライズしてました。JavaオブジェクトのフィールドがDateの時もGsonが良きに計らってきちんとパースしてくれて凄いなー、と思っていたけどそんなことはありませんでした。特にタイムゾーンの扱いには注意が必要だと思いました。それでも容易にカスタマイズできるので凄いんですけど。

まず普通にインスタンス化したGsonオブジェクトだとCloudSearchの返す日付フォーマット(yyyy-MM-dd’T’HH:mm:ss’Z’)に対応しない。

なのでGsonBuilderを生成し、setDateFormatとか言って日付のフォーマットを指定するようにした。

これでうまく行ったと思ってたけどよくよく見るとCloudSearchに入ってる時間より9時間進んだ時間でDate型に変換されていてダメっぽい。たぶんGsonが内部的にタイムゾーンをUTC固定にしている??

でもちゃんとやりようはあるらしい。Gsonを試す(2)
registerTypeAdapterやらいうのを使えばより細かく日付のパース処理をカスタマイズできるっぽい。すばらしい。以下のようにした。

なんとなく上手く行っているっぽい。


コメントを残す