1

私が書いたこのテストが jodatime 1.6.2 で失敗するのはなぜですか? バグですか?

@Test
 public void testIfJodaTimePeriodsHandlesPeriodTypesOtherThanMinutesAndHours() {
  long twentyDaysInMillis = TimeUnit.MILLISECONDS.convert(20, TimeUnit.DAYS);
  Period twoWeeks = new Period(twentyDaysInMillis, PeriodType.weeks());
  Assert.assertEquals(2, twoWeeks.getWeeks()); 
// twoWeeks.getWeeks() actually returns 0!!
 }

参考までに、すべての PeriodTypes を持つ期間は、コンストラクターに渡されたミリ秒が 25 時間を超える場合でも、分と時間のフィールドにのみ入力します。これは直感に反します。

4

1 に答える 1

5

それPeriodが JodaTime での動作です。

Period正確なフィールド (時間、分、秒、ミリ秒) と不正確なフィールド (その他) があります。不正確なフィールドは、夏時間の影響を受ける場合があります。つまり、Period24 時間は、夏時間の境界で 1 日未満または 1 日を超える場合があります。

したがって、ミリ秒かかるコンストラクターは、正確なフィールドのみを設定します。不正確なフィールドを (夏時間を考慮せずに) 初期化するには、次のものが必要です。

Period twoWeeks = new Period(twentyDaysInMillis).normalizedStandard(PeriodType.weeks()); 

以下も参照してください。

于 2010-10-27T15:10:26.907 に答える