2017-01-27 4 views
3

私は日付(すなわち、2017-01-24T06:00:00.000Z)を取るrequestParamを取得しました。春の@DateTimeFormatは、前日のDateオブジェクトを生成します。

DateTimeFormatを使用して、日付にフォーマットして自分のコントローラに渡します。私は私のコンソールにMyDateに該当を印刷するとき、それは月24日である必要があり、上記

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date myDate 

は、私が「月2017年1月23日午後06時00分○○秒CST」が、私の例で取得します。なぜ私の日付を1日前に変更するのですか?

答えて

2

ここにはいくつかのことがあります。

最初に、@DateTimeFormatjava.util.Dateフィールドまたはパラメータに注釈を付けるときはuses a SimpleDateFormat with its timezone set to UTCです。

第二に、あなたは

最も一般的なISO日付書式yyyy-MM-ddを表しDateTimeFormat.ISO.DATE、例えばを使用しました"2000-10-31"。言い換えれば

、それは(あなたの日付文字列がとにかくズールーで根ざしたので、これは本当に重要ではありません)あなたの日付文字列内の任意のタイムゾーン情報を考慮していません。

第3に、isoパターン以外のすべてが無視される日付文字列を指定しました。 SimpleDateFormatは、2017-01-24部分のみを扱います。

タイムゾーンはUTCに設定されているため、2017-01-24の日付は、UTC、深夜0時、分、秒を基準にしていると見なされます。

最後に、システムのデフォルトのタイムゾーンは中央標準時です。 UTC-6)の場合、DateオブジェクトのtoStringを呼び出すと、そのタイムゾーンでフォーマットされたStringが返されます。真夜中の6時間前。


Dateにはタイムゾーンという概念がありません。タイムスタンプです。


あなた@DateTimeFormatは、時刻と時間帯の両方を解釈し、適切なpatternを構築、これを「修正」します。私は使用するでしょう

@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX") Date myDate 
関連する問題