昨日、XStreamでDateからxmlにマーシャリングした後、Dateに再度アンマーシャリングした後、人の生年月日が変更されたという問題が発生しました。アムステルダムタイムゾーンのSimpleDateFormatの動作が一貫していません
System.setProperty("user.timezone", "Europe/Amsterdam");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S z");
String textIn = "1933-09-17 00:00:00.0 CET";
Date date = dateFormat.parse(textIn);
String textOut = dateFormat.format(date);
System.out.println("input : " + textIn);
System.out.println("date : " + date);
System.out.println("output: " + textOut);
結果:
input : 1933-09-17 00:00:00.0 CET
date : Sun Sep 17 00:19:32 CEST 1933
output: 1933-09-17 00:19:32.0 CEST
私はそれが特定の方法で説明可能である1940年より前の日付でのみ起こることが判明
:オランダで次のコードは、XStreamのの奇妙な行動を再現します1940年にいわゆる「アムステルダム・ティジュ」(GMT + 00h19m32s)からヨーロッパ時間(GMT + 01h00m00s)に変更がありました。タイムゾーンが保存時間(CETからCESTまで)に変わる理由を説明することはできません。
私はベルリン
System.setProperty("user.timezone", "Europe/Berlin");
にタイムゾーンを変更した場合、私は私が期待する結果を得る:
input : 1933-09-17 00:00:00.0 CET
date : Sun Sep 17 00:00:00 CET 1933
output: 1933-09-17 00:00:00.0 CET
が私のサーバーはアムステルダムに位置しています。この問題を回避するために、サーバーのタイムゾーンをベルリンに設定します。
私の質問は:これはSimpleDateFormatのバグだとお考えですか?または、 "1933-09-17 00:00:00.0 CET"はアムステルダムの日付が無効なため、コードが無効ですか?
バグの場合、これを報告する必要がありますか? 日付入力がそれ自身で無効である場合、解析メソッドはエラーをスローしませんか?オランダはなかったが
フン、日付は***な頭痛です* **私はこの質問に対する答えを知りたいと思っています。 –