2010-10-27 66 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