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