2011-10-14 9 views
3

昨日、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"はアムステルダムの日付が無効なため、コードが無効ですか?

バグの場合、これを報告する必要がありますか? 日付入力がそれ自身で無効である場合、解析メソッドはエラーをスローしませんか?オランダはなかったが

+1

フン、日付は***な頭痛です* **私はこの質問に対する答えを知りたいと思っています。 –

答えて

2

は、1933年にCEST遷移にCETをしなかったドイツのようになります。

+0

ありがとう!人はAMTタイムゾーンで、または夏時間がアクティブな場合はNSTで生まれます。そして数年後にNETとNESTがあり、今まではCETとCESTを持っていました。歴史は決して単純ではありません。希望は未来になる! – boes

関連する問題