2013-02-18 55 views
1

我試圖在兩個日期之間找到沒有月份。任何幫助讚賞。以下示例使用Joda-Time如何在添加天數後得到Joda-Time的確切月份差異

DateMidnight start = new DateMidnight(new Date()); 
DateMidnight dtEndDate = start.plusDays(11); //adding Days 

int months = Months.monthsBetween(start, dtEndDate).getMonths(); 

System.out.println("Months between " + 
        start.toString("yyyy-MM-dd") + " and " + 
        dtEndDate.toString("yyyy-MM-dd") + " = " + 
        months + " month(s)"); 

上面的代碼返回「0」 2013 - 2月18至2013-MAR-01

我不能添加+1個月我需要找到在同一個月差,也我需要找出兩個過去的時間段之間的差異,即在'2012年12月至04年'和'2013年1月至06年'之間應該返回-1;

scenario1: 

date1: 2013-02-18 
    date1.plusDays(11); 
date2: 2013-03-01 
Output : 0 month(s) //but I need as 1 Month 

scenario2: 
date1: 2013-02-18 
    date1.plusDays(1); 
date2: 2013-02-19 
Output : 0 month(s) //returns correctly exactly what I need 

scenario3: 
date1: 2013-03-18 
date2: 2013-02-19 
Output should be : -1 month(s) 
+0

到底什麼是「月」,由你定義是什麼?是否「這段時間跨越了多少個月的邊界」? 2013-02-28(2月底)至2013-03-01(3月初)算作1個月? – 2014-01-24 04:33:46

回答

5

設置月份到1兩個日期的日子比較之前:

startModified = start.withDayOfMonth(1); 
endModified = end.withDayOfMonth(1); 
int months = Months.monthsBetween(startModified, endModified).getMonths(); 
+0

感謝您的答覆,是否有任何區別,如果我使用DateTime而不是DateMidnight,當我使用DateMidnight其工作,但不與DateTime – StaleElementException 2013-02-18 16:22:24

+0

然後你的日期必須有一個時間組件。 'DateMidnight'將所有時間正常化到午夜。如果您使用'DateTime',並且您的日期有不同的時間,它會改變結果,因爲從2012年3月1日下午4點到2012年4月1日下午1點之間的月數將少於一個月(因爲它將僅在下午4點完成一個月)。 – 2013-02-18 16:31:53

+0

再次感謝您的解釋。我不知道爲什麼以下給'0'月DateTime start = new DateTime(「2013-02-22T16:15:53.113Z」); DateTime end = new DateTime(「2013-03-28T00:00:00.000Z」); – StaleElementException 2013-02-18 16:38:03

相關問題