为什么我写的这个测试在jodatime 1.6.2中失败了?这是个bug吗?
@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小时。这是违反直觉的。
发布于 2010-10-27 23:10:27
这就是JodaTime中Period的工作方式。
Period有精确的字段(小时、分钟、秒、毫秒)和不精确的字段(其他)。不精确的字段可能会受到夏令时的影响。也就是说,在夏令时边界上,24小时的Period可能小于一天,也可能大于一天。
因此,耗时几毫秒的构造函数仅填充精确的字段。要初始化不精确的字段(不考虑夏令时),您需要:
Period twoWeeks = new Period(twentyDaysInMillis).normalizedStandard(PeriodType.weeks()); 另请参阅:
Period javadochttps://stackoverflow.com/questions/4034388
复制相似问题