Java jodatime期间的Bug?
为什么我写的这个测试在jodatime 1.6.2中失败了?是虫子吗Java jodatime期间的Bug?,java,jodatime,period,Java,Jodatime,Period,为什么我写的这个测试在jodatime 1.6.2中失败了?是虫子吗 @Test public void testIfJodaTimePeriodsHandlesPeriodTypesOtherThanMinutesAndHours() { long twentyDaysInMillis = TimeUnit.MILLISECONDS.convert(20, TimeUnit.DAYS); Period twoWeeks = new Period(twentyDaysInMillis,
@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!!
}
仅供参考,所有PeriodType的周期仅在字段中填充分钟和小时,即使传递给构造函数的毫秒数超过25小时。这是违反直觉的。这就是在JodaTime中
期间的工作方式
Period
有精确字段(小时、分钟、秒、毫秒)和不精确字段(其他)。不精确的字段可能会受到夏令时的影响。也就是说,在夏令时边界上,24小时的周期可能少于一天或多于一天
因此,花费毫秒的构造函数只填充精确的字段。要初始化不精确的字段(不考虑夏令时),您需要:
Period twoWeeks = new Period(twentyDaysInMillis).normalizedStandard(PeriodType.weeks());
另请参见:
这就是JodaTime中
期间的工作方式
Period
有精确字段(小时、分钟、秒、毫秒)和不精确字段(其他)。不精确的字段可能会受到夏令时的影响。也就是说,在夏令时边界上,24小时的周期可能少于一天或多于一天
因此,花费毫秒的构造函数只填充精确的字段。要初始化不精确的字段(不考虑夏令时),您需要:
Period twoWeeks = new Period(twentyDaysInMillis).normalizedStandard(PeriodType.weeks());
另请参见:
我想我的缺点是没有正确阅读文档。谢谢你提供了翔实的答案!我想我的缺点是没有正确阅读文档。谢谢你提供了翔实的答案!后续操作:以下测试的失败是Period.normalizedStandard()文档中描述的一个“功能”:@test public void assertJodaTimeFormatsYears(){Period p=new Period(TimeUnit.millides.convert(380,TimeUnit.DAYS)).normalizedStandard();Assert.assertEquals(1,p.getYears());}建议如何将周溢出到月和年字段中?后续操作:以下测试失败是Period.normalizedStandard()文档中描述的“功能”:@test public void assertJodaTimeFormatsYears(){Period p=new Period(TimeUnit.millides.convert(380,TimeUnit.DAYS)).normalizedStandard();Assert.assertEquals(1,p.getYears());}建议使用什么方法将周溢出到月和年字段中?