2010-10-27 65 views
1

为什么我写的测试在jodatime 1.6.2中失败?这是一个错误吗?jodatime期间的错误?

@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小时。这是违反直觉的。

+0

后续: 以下测试的失败是Period.normalizedStandard()文档中描述的“特征”: @Test public void assertJodaTimeFormatsYears(){ \t Period p = new Period(TimeUnit.MILLISECONDS.convert(380,TimeUnit.DAYS))。normalizedStandard(); \t Assert.assertEquals(1,p.getYears()); } 什么是推荐几个星期溢出到几个月和几年的领域? – eirirlar 2010-10-28 15:07:38

回答

5

这就是Period在JodaTime中的工作原理。

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

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

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

参见:

+0

我猜测我的阅读文档不正确。感谢您提供丰富的答案! – eirirlar 2010-10-28 09:17:44