我写的这个测试为什么在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!!
}
仅供参考,即使所有传递给构造函数的毫秒数超过25小时,具有所有PeriodTypes的Periods也只能填写分钟和小时的字段。这是违反直觉的。
最佳答案
这就是Period
在JodaTime中的工作方式。Period
具有精确的字段(小时,分钟,秒,毫秒)和不精确的字段(其他)。不精确的字段可能会受到夏令时的影响。也就是说,在夏时制边界上,24小时的Period
可能少于一天或一天以上。
因此,花费毫秒的构造函数仅填充精确字段。要初始化不精确的字段(不考虑夏令时),您需要:
Period twoWeeks = new Period(twentyDaysInMillis).normalizedStandard(PeriodType.weeks());
也可以看看:
Period
javadoc