2017-06-14 2 views
4

私は日付フィールドを持つ単純なJavaオブジェクトを持っている:Javaの - 日付、フォーマット、タイムゾーンと春ブーツのデフォルト

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") 
private Date date; 

私はデバッガと日付を調査するとき、私は以下を参照してください

Wed Jun 14 00:00:00 BST 2017 

しかし、私はSpring bootcontrollerでそれを返したら私が取得:

"date": "2017-06-13 23:00:00" 
  1. 違いの原因は何ですか?
  2. Javaで日付をBSTと扱うのはなぜですか?
  3. Java Dateクラスには、タイムゾーン情報が含まれているのか、それとも長いタイムスタンプのタイムスタンプだけが含まれていますか?
  4. Spring bootは、DTONをJSONにシリアル化するときにデフォルトでUTC形式を使用していますか?
+2

デバッガではデフォルトのDate.toString出力が表示されます。詳しくはhttps://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/ –

+1

を参照してください。日付クラスは時間をサポートしていませんゾーンは常に有効なUTCです。場合によっては、UTCがBST(英国標準時)として表示されることがあります。 –

答えて

1

java.util.Dateにはタイムゾーン情報(のみlongタイムスタンプ)を持っていませんが、それはtoString()方法でシステムのデフォルトのタイムゾーンを使用しています - あなたはこのhere(既にコメントで示唆したように)についての詳細情報を見つけることができます。

TimeZone.getDefault()の値を確認してください。それはおそらくEurope/Londonでしょう - 夏の今ロンドンでは、このタイムゾーンの短い名前(Date.toString()によって使用される)はBSTです。

あなたの出力が示すように、春はおそらく(UTC2017-06-13 23:00:00BST2017-06-14 00:00:00あるとして)UTCを使用しています。

関連する問題