私は、特定の年のJan 1 00:00に日付を開始するJavaアプリケーションを作成しました。そして、私はその日を355倍に増やし、途中で結果をプリントアウトします。私は、タイムゾーンが夏時間の周りでどのように動作するのか、1日を追加すると、夏時間に移行するときに真夜中から午前1時に時間がシフトすることを理解しようとしていました。Javaタイムゾーンで日を追加する東ヨーロッパの夏時間(EEST)
01/01/2008 00:00:00 EST
01/02/2008 00:00:00 EST
01/03/2008 00:00:00 EST
01/04/2008 00:00:00 EST
...
と私は夏時間に渡るとき、I:私のデフォルトのタイムゾーン(米国東部)で実行している場合、私が期待するように、出力がどのように見える
TimeZone tz = TimeZone.getDefault();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z");
sdf.setTimeZone(tz);
Calendar cal = Calendar.getInstance(tz);
cal.set(2008, 0, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
for (int i = 0; i < 355; i++) {
System.out.println(sdf.format(cal.getTime()));
cal.add(Calendar.DAY_OF_MONTH, 1);
}
:私のコードは次のようになります私は東ヨーロッパの夏の時間を観察するタイムゾーンを使用する場合
03/10/2008 00:00:00 EDT
03/11/2008 00:00:00 EDT
03/12/2008 00:00:00 EDT
を取得し、(このケースでは、私はアフリカ/カイロのタイムゾーンを選択しました)私は出力を得る:
01/01/2008 00:00:00 EET
01/02/2008 00:00:00 EET
01/03/2008 00:00:00 EET
01/04/2008 00:00:00 EET
01/05/2008 00:00:00 EET
が、私は東ヨーロッパの夏の時間に渡るとき、私が取得:
04/25/2008 01:00:00 EEST
04/26/2008 01:00:00 EEST
04/27/2008 01:00:00 EEST
そしてEESTが終了したときに不思議な、私はまだ
08/29/2008 01:00:00 EET
08/30/2008 01:00:00 EET
は、私は、なぜこれらのように混乱していますtimezonesの動作が異なり、アフリカ/カイロのタイムゾーンのバグである場合、またはタイムゾーンの動作を誤解している場合は...
このウィルスに対する洞察感謝する。
あなたが使用しているJava版はありますか? JREのタイムゾーンDBを最新のものに更新しましたか? – kosa
私はJava 6アップデート29を使用しています... 30に更新しています... –