2012-02-07 18 views
3

私は、特定の年の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の動作が異なり、アフリカ/カイロのタイムゾーンのバグである場合、またはタイムゾーンの動作を誤解している場合は...

このウィルスに対する洞察感謝する。

+0

あなたが使用しているJava版はありますか? JREのタイムゾーンDBを最新のものに更新しましたか? – kosa

+0

私はJava 6アップデート29を使用しています... 30に更新しています... –

答えて

3

深夜時間夏時間へのCairo time zone変化 - その4月25日2008年の真夜中の間に時間がスキップされました...壁の時計は行きました:

04/24/2008 23:59:58 
04/24/2008 23:59:59 
04/25/2008 01:00:00 
04/25/2008 01:00:01 

から一度に一日を追加してみてください米国東部時間帯の午前2時と同じことが表示されます - ある時点で03時に移動します。

正確に達成しようとしていることは明確ではありません。特定のタイムゾーンの日付/時刻に「経験豊富なミリ秒数」を追加するか、「論理ミリ秒 "をローカルの日付/時刻に変換しますが、タイムゾーンは考慮されません。特定のゾーンでローカルから時々変換する場合は、あいまいさ(1回のローカルタイムが2回発生する)またはスキップ(1回のローカルタイムがまったく発生しない)の可能性を考慮する必要があります。追加の楽しみのため

は、昨年サモアが原因EDIT

... -14から+10までのタイムゾーンを変更するには、完全に12月30日をスキップ:ああ、私の標準勧告が適用されます:溝java.utilのを。カレンダー/日付、Joda Time

+0

Jon、ありがとうございます。私はそれが問題の一部だと信じています。しかし、私はEESTを離れるときに同様の挙動を見せると予想されます...矛盾は間違っているようです。しかし、私が何をしようとしているのかを明確にするために、私は基本的に毎日真夜中から真夜中にかけての期間を作成しようとしています。私は貯蓄時間を横切って、期間が23時間または25時間であるかもしれないことを理解しています(または、その日に真夜中が存在しないこともあります)。 –

+0

@JeffStorey:いいえ。* EEST、 :00は経験済み* 2回*です。基本的に深夜になっても、現地時間が発生しない状況にはなりません。 –

+0

ESTは深夜に発生しますが、DSTは午前2時に発生するため、「1日」を追加するとDSTとESTの効果が異なります。 –

関連する問題