wrongwrongな開発日記

しんまいさんの忘備録

【SpringBoot】vuejs-datepickerで取得した日時をPOSTするとサーバーサイドで読んだ時に1日前になる問題が発生した【Vue.js】

やりたかったこと

  • vuejs-datepickerでPOSTした日時から、サーバーサイドで日付を取得する

問題の概要

  • vuejs-datepickerタイムゾーンまで含めてデータを出力する
  • Jacksonはフォーマット設定をしなければ受け取った日時をGMT基準(=日本時間-9時間)に変換し、それをLocalDateに変換する
  • このため、サーバーサイドが受け取ったLocalDateが日本時間の9時間前(= 時間によっては昨日)になった

補足

  • 自分のやっていた環境では、vuejs-datepickerの出力するデフォルト時間は日本時間で9時に設定されており、サーバーサイドで時間は利用していなかった
  • このため、日本時間で9時未満が出力されるような特定の操作をしなければ症状が再現できなかった

対策

  • 本来はJacksonが解釈する日時のフォーマットを決定し、設定しておくべき
  • 日付しか必要なく、応急的な対処でよいのであれば、時間情報を無くして(e.g. ハイフン区切り: 2019-01-01)POSTすればズレることは無くなる

結論

  • 日時扱うときは日時表現のフォーマットや設定にまで気を配った方がよい