2

Java で日付の解析を行っていますが、奇妙な動作に遭遇しています。

次のような日付文字列があります。

String s = "Sun Aug 11 2013 11:00:00 -0700 (Pacific Daylight Time)"

私はそれを日付オブジェクトに解析しようとしています:

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss Z (zzzz)");

次に、結果の日付オブジェクトを出力しsdf.parse(s)て取得します。

Sun Aug 11 12:00:00 CDT 2013

私は中央のタイム ゾーンにいるので、そのように出力することは理にかなっていますが、CDT は -0500 であるため、解析された日付は 12:00 ではなく 13:00 である必要があります。

奇妙なことに、冗長なタイム ゾーン情報のいずれかを削除すると、日付が正しく解析されます。形式"EEE MMM dd yyyy HH:mm:ss Z ('Pacific Daylight Time')"または形式を使用する"EEE MMM dd yyyy HH:mm:ss '-0700' (zzzz)"と、正しい日付が得られます。

Sun Aug 11 13:00:00 CDT 2013

この動作は、夏時間内の日付でのみ発生するようです。代わりに、たとえば 12 月の日付を最初の日付形式で解析すると、正しい結果が得られます。

解析している日付の形式をある程度制御できますが、さまざまなタイムゾーンからのものである可能性があります。以前にこの動作に遭遇した人はいますか?日付文字列の形式を変更せずに回避する方法はありますか? タイム ゾーンの指定が冗長であることは認識していますが、私が知る限り、間違っているわけではありません。

4

1 に答える 1