2017-02-15 4 views
1

joda DateTimeを使用して固定の日付時刻を作成しようとしていますが、コード実行時間(現在のシステム時刻)に基づいて驚くべき結果が得られます。ここ コードが一方つの異なる結果(タイムゾーンの変更をオフセット)DateTime APIは、コード実行時間に基づいて異なる結果を生成します

//Please note that the local time zone is CET. 
00:00:00:00 > execution time < 03:00:00 -> 2012-10-28T02:00:00.050+02:00 
03:00:00:00 >= execution time =< 24:00:00 -> 2012-10-28T02:00:00.050+01:00 

を生成し、コンストラクタを使用して同じ結果を生成するコード

DateTimeZone.setDefault(DateTimeZone.forID("Europe/Brussels")); 
DateTime t1 = new DateTime().withDate(2012, OCTOBER, 28).withTime(2, 0, 0, 50); 
//Note that 2012, OCTOBER, 28, 02:00:00 is a DST swtich time in Belgium 

DateTimeZone.setDefault(DateTimeZone.forID("Europe/Brussels")); 
DateTime dateTime = new DateTime(2012, OCTOBER, 28, 2, 0, 0, 50); //gives 2012-10-28T02:00:00.050+02:00 

IでありますwithDate/Timeメソッドの代わりにコンストラクタを使用する必要があるという印象があります。しかし、私は少しこれを扱うことができないDateTimeなぜ混乱している?

答えて

1

まあ、式new DateTime()は、実行時には賢明ですから、最終的には異なるオフセットになります。 問題の具体的な値については、アンビバレンス(同じローカルタイムが2回発生する!)があります。私はあなたがより良い別のコンストラクタを選択して、代わりに明示的に必要なすべてのフィールド値を設定し、呼び出しのいずれか

withLaterOffsetAtOverlap() 

または

withEarlierOffsetAtOverlap() 

べきだと思います

DateTimejavadoc参照してください。

関連する問題