サーバーからE, dd MMM yyyy HH:mm:ss Z
タイムゾーンの形式で日付を取得しました+0200
yyyy-MM-dd HH:mm:ss
を使用して独自の形式で解析します
myFormat.format(serverFormat.parse(dateString));
そして、私は時間を間違えました。それは 1 時間前です。したがって、10:00
変換すると、 が得られ09:00
ます。なんで?
サーバーからE, dd MMM yyyy HH:mm:ss Z
タイムゾーンの形式で日付を取得しました+0200
yyyy-MM-dd HH:mm:ss
を使用して独自の形式で解析します
myFormat.format(serverFormat.parse(dateString));
そして、私は時間を間違えました。それは 1 時間前です。したがって、10:00
変換すると、 が得られ09:00
ます。なんで?
ここでの問題は DST (夏時間) だと思います。基準は冬時間です。今は夏なので、1時間の差があります。+0200
国に依存するため、夏時間をサポートしない、またはサポートできないタイムゾーン シフト構文を使用しています。
Europe/Amsterdam
の代わりに、タイム ゾーン定義のロケール固有の構文を使用する必要があります+0100
。さらに、クラスの API を見てみましょうTimeZone
:
inDaylightTime(Date date)
useDaylightTime()
おそらく問題の原因である戻り値のタイムゾーンを確認してください。
DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
formatter.setTimeZone(TimeZone.getTimeZone("GMT+2"));
System.out.println( formatter.format(serverFormat.parse(dateString));
それを試してみてください
formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");