山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

DBUnit Excelロード時の時刻データ

先日紹介したDBUnitですが、一点不具合が

ありました。

ExcelからOracleにデータを読み込む際に

時刻が9時間ずれてしまいます。

例えばExcel
2013/2/1 6:00:00
のデータがあった場合、Oracleに取り込まれると

9時間ずれます。

DBUnitソースコードを見るとGMT(世界標準時間)との

時差を計算してあえてずらしているようです。

DBによってはずらさないといけない場合も

あるのかもしれませんが、Oracleの場合逆にずれて

しまいます。

これを無効にするフラグもなさそうなので仕方ないので

取り込み時にタイムゾーンGMTに変えることで

正しく取り込めるようになりました。

TimeZone t = TimeZone.getDefault();
// dbunit modifies time incorrectly when timezone is not GMT.
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
dbTester.onSetup();
TimeZone.setDefault(t);

若干無理やり感ただよいますがテストする分には

これで問題なくできるようになりました。

2013/10/25訂正
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
となっていましたが、これだとサマータイムに1時間ずれることがわかりました。"GMT"に訂正しました。