以下のコードを実行しようとしています。3 月の第 4 日曜日の午前 2 時から始まる dst でタイムゾーンを定義し、3 月の第 5 日曜日の午前 2 時に終了します。
SimpleTimeZone st = new SimpleTimeZone(-18000000, "DSTTesting", Calendar.MARCH, 4, 1, 7200000, Calendar.MARCH, -1, 1, 7200000);
Calendar cal = Calendar.getInstance(st);
cal.set(2013, 0, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
System.out.println("DST_OFFSET before subtracting hours : "+cal.get(Calendar.DST_OFFSET));
cal.add(Calendar.HOUR, -2);
System.out.println("DST_OFFSET after subtracting hours : "+cal.get(Calendar.DST_OFFSET));
出力は次のとおりです。
時間を減算する前の DST_OFFSET : 0 時間
を減算した後の DST_OFFSET : 3600000
2013 年 1 月の午前 1 時から 2 時間を引くと、DST_OFFSET が変わる理由がわかりません。理想的には、2013 年 1 月 1 日と 2012 年 12 月 31 日の両方の日付が、作成した TimeZone の DST 期間外であるため、両方の DST_OFFSET の値が同じである必要があります。