アプリケーションでは一定の期間を使用します。ユーザーが新しい期間を追加すると、デフォルトで午前 6:00 から翌日の午前 6:00 になるはずです。
通常は 24 時間ですが、1 つ問題があります。夏時間の変更が行われると、その期間の長さが変わります。例えば :
10 月 27 日午前 6:00 ~ 10 月 28 日午前 6:00。この期間に、CEST から CET タイム ゾーンへの変更シフトが実行されます。したがって、この期間には 25 時間が含まれます。
From 27 October 6:00 AM to 28 October 3:00 AM - there are 21 hours
at 3:00 am the time is shifted back by 1 hour, so there are 4 hours until 28 October 6:00 AM.
この問題が発生したため、ユニット テストを記述して、再度表示されないようにしました。テストは私たちのマシンでは成功しましたが、CI サーバーでは失敗しました (別のタイム ゾーンにあります)。
問題は、マシンのタイム ゾーンとは無関係に単体テストをどのように設計できるかということです。
現在、時間スパンの計算はJoda-Timeを使用して計算されます。
if ((aStartDate == null) || (aEndDate == null)) {
return 0;
}
final DateTime startDate = new DateTime(aStartDate);
final DateTime endDate = new DateTime(aEndDate);
return Hours.hoursBetween(startDate, endDate).getHours();
私たちの側では成功するが、CI サーバーでは失敗する単体テスト:
Calendar calendar = Calendar.getInstance();
calendar.set(2012, Calendar.OCTOBER, 27, 6, 0);
startDate= calendar.getTime();
calendar.set(2012, Calendar.OCTOBER, 28, 6, 0);
endDate= calendar.getTime();
カレンダーにタイムゾーンを使用しようとしました:
TimeZone.setDefault(TimeZone.getTimeZone(TimeZone.getTimeZone("GMT").getID()));
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(TimeZone.getTimeZone("GMT").getID()));
calendar.set(2012, Calendar.OCTOBER, 27, 6, 0, 0);
startDate= calendar.getTime();
calendar.set(2012, Calendar.OCTOBER, 28, 6, 0, 0);
endDate= calendar.getTime();
ただし、この場合、結果の startDate は 10 月 27 日 9:00 CEST で endDate は 10 月 28 日 8:00 CET であるため、テストはこちら側でも失敗します。
前もって感謝します。