要計算兩個日期(日期或日曆對象)之間的日期,還要考慮計算的結束日期。考慮結束日期也用於java中的天計算邏輯
我用以下方法:
public static int daysBetween(Date d1, Date d2) {
return Days.daysBetween(new LocalDate(d1.getTime()), new LocalDate(d2.getTime())).getDays();
}
例如
Date d1 = new Date(); // 30-08-2016
Calendar c= Calendar.getInstance();
c.add(Calendar.YEAR, 2016);
c.add(Calendar.MONTH, Calendar.AUGUST);
c.add(Calendar.DAY_OF_MONTH, 31)// 31-08-2016
Date d2 = c.getTime();
daysBetween(D2,D1);
該方法返回「1」,但我想爲「2」,因爲我需要考慮的結束日期也意味着30和31
對於那些要求我可以添加+1不管這方法返回或之前還返回值。這不是解決問題的正確方法,也需要考慮閏年日期。
請幫我解決問題。
對於你*不*問的技術術語是'半開放',其中時間跨度被定義爲開始*包含*而結束*是*排除*。 * *要求的是「關閉」,開始和結束都包含在內。半開放式方法通常被使用,並且更加合理和實用。一致使用時,Half-Open使日期時間處理邏輯更清晰,更清晰,更簡單。如果您的要求要求封閉號碼,只需添加一個就是正確的解決方案,除了零計數(您需要根據需求思考和制定)。 –
@BasilBourque一般來說,半開放是好的,因爲它有助於處理那些實際使用的潛在更精確單位的時間間隔,但對於日期間隔來說情況不同,因爲單位的日子已經是最小的單位。像往常一樣在銀行和保證領域,在這個領域工作的人(像我一樣)使用截止日期間隔(例如一個整月通常被建模爲封閉範圍[2016-08-01/2016-08-31],好處不要顯示另一個月而不是像[2016-08-01/2016-09-01) –