huruyosi’s blog

プログラミングとかインフラとかのメモです。

jacksonでjava.util.Dateをデシリアライズすると9時間ずれる

"sched_date": "2015-09-12"をデシリアライズしてjava.util.Date sched_dateマッピングすると2015年9月12日 0時0分0.0秒を期待しているのですが、java.util.Date#.getTime()を行ってみると、9時間進んでいます。

日本で9時間のずれということはタイムゾーンの可能性が非常に高いです。 案の定、FAQに書かれています。

http://wiki.fasterxml.com/JacksonFAQDateHandling

How come this time is off by 9 hours? (5 hours, 3 hours etc)

You may be thinking in terms of your local time zone. Remember that Jackson defaults to > using GMT (Greenwich time, one hour behind central European timezone; multiple hours ahead of US time zones).

ObjectMapeerにタイムゾーンを指定すると希望する値を取れます。

ObjectMapper mapper = new ObjectMapper();
mapper.setTimeZone(TimeZone.getTimeZone(ZoneId.of("Asia/Tokyo")));

stackoverflow.com