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 的 Periods 仅填写分钟和小时的字段,即使传递给构造函数的毫秒数超过 25 小时。这是违反直觉的。

4

1 回答 1

5

这就是PeriodJodaTime 的工作原理。

Period具有精确字段(小时、分钟、秒、毫秒)和不精确字段(其他)。不精确的字段可能会受到夏令时的影响。也就是说,Period在夏令时边界上,24 小时可能少于一天或多于一天。

因此,花费毫秒的构造函数只填充精确的字段。要初始化不精确的字段(不考虑夏令时),您需要:

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

也可以看看:

于 2010-10-27T15:10:26.907 回答