2014-03-19 110 views
2

我想檢查一個給定的時間間隔是使用下面的代碼大於12個月以上:jodatime截斷剩下的幾個月,當間隔超過一年

public void testMonths() throws Exception { 
    DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-mm"); 
    DateTime from = format.parseDateTime("2010-01"); 
    DateTime until = format.parseDateTime("2011-06"); 

    int months = Months.monthsBetween(from, until).getMonths(); 

    assertTrue(months > 12); // months = 12 for some reason. 
} 

每當給定區間多的話,一年就將截斷去年的剩餘月份。

輸入我試着運行:

15 months will return 12 months. 
25 months will return 24 months. 
36 months will return 36 months. 
37 months will return 36 months. 

回答

4

的問題是你的文本模式。 「mm」表示「分鐘」而不是「月」。如果您將模式更改爲"yyyy-MM",您會發現它工作正常。

作爲指導原則第一件事,我會在情況下就可以,這是嘗試這種隔離到儘可能小的問題。因此,採取文本分析和的DateTime(時區等)複雜的方程:

LocalDate from = new LocalDate(2010, 1, 1); 
LocalDate to = new LocalDate(2011, 6, 1); 
int months = Months.monthsBetween(from, to).getMonths(); 

現在你會看到它的17.所以,那麼下一步將是回到您的原代碼,並打印出的fromto值......,你會看到東西這樣的:

2010-01-01T00:01:00.000Z 
2011-01-01T00:06:00.000Z 

基本上避免文本分析,除非那是根本你試圖診斷問題的一部分。

+0

感謝您的有用幫助和建議,您的回答解決了這個問題。 –

相關問題