有人可以解释为什么以下测试失败了吗?
@Test
public void testDuration() {
Duration duration = Duration.standardDays(1);
assertTrue(duration.getStandardMinutes() == 1440); //OK
assertTrue(duration.toPeriod().getMinutes() == 1440); //NOK. result = 0
assertTrue(new Period(duration.getMillis()).getMinutes() == 1400); //NOK. result = 0
}
答案 0 :(得分:2)
JodaTime中的Period
代表"set of duration field values"。因此,方法getMinutes()
,getHours()
,...返回这些字段的值,而不是计算分钟,小时数......
此外,Duration
的转换根据PeriodType
和年表设置字段。
从API(http://joda-time.sourceforge.net/apidocs/org/joda/time/ReadableDuration.html#toPeriod%28%29):
Period toPeriod()
使用标准句点类型和ISO年代表将此持续时间转换为Period实例。
仅使用句点类型中的精确字段。因此,仅使用该时段上的小时,分钟,秒和毫秒字段。不会填充年,月,周和日字段。
如果持续时间很短,不到一天,那么此方法将按预期执行并均匀分割字段。如果持续时间大于一天,则所有剩余持续时间将存储在最大可用字段中,在这种情况下为小时。
这意味着,由于Duration
的日期恰好是24小时,所有信息都存储在小时字段中,而分钟则保持为0。
有关Interval
,Duration
和Period
之间差异的详细说明,请参阅this question。
答案 1 :(得分:1)
请参阅here
1天的时间不等于24小时的时间,也不等于1小时等于60分钟。这是因为时间段代表时间段的抽象定义(例如,一天可能实际上不是24小时,在夏令时边界可能是23或25)。