我需要根據自己的任務處理日期。準確地說,我需要檢查兩個日期之間的月份差是否為整數。2個日期輸入參數。結果-布爾值:true如果月份計數準確(無尾),false否則。例如:之間diff_months31.01.2018和28.02.2018應為1個月,這是可能的組合。30.01.2018和28.02.2018 : 1個月無尾,所以OK29.01.2018和28.02.2018 : 1個月無尾,所以OK28.01.2018和28.02.2018 : 1個月無尾,所以OK27.01.2018和28.02.2018 : 0個月讓我們再參數:28.02.2018和28.03.2018 : 1個月無尾,所以OK28.02.2018和29.03.2018 : 1個月1天,所以失敗28.02.2018和27.03.2018 : 0個月有尾巴,所以失敗我發(fā)現java date api具有用于日期計算的特殊API,但從我的角度來看,它的工作原理是矛盾的:LocalDate.of(2018, 1, 31).until(LocalDate.of(2018, 2, 28), ChronoUnit.MONTHS); // 0
LocalDate.of(2018, 1, 31).plusMonths(1); // but 2018-02-28第二個結果是預期的,但第一-不是??雌饋碚娴暮芷婀帧D芊窠ㄗh兩個日期之間的月份計算LocalDate#plusMonths方法與該方法一致?
2 回答

慕尼黑5688855
TA貢獻1848條經驗 獲得超2個贊
用日歷術語表示日期之間的差異是模棱兩可的。在Period1月31日和2月28日之間可以“10月日”或“0個月28天內”消費。這兩個答案都是正確的。
如果要實現確定兩個日期是否plusMonths對齊的特定邏輯,則java.time為您提供了所有工具。首先,獲取日期之間的月數,而不考慮該月中的哪幾天,然后用于plusMonths測試:
boolean isExactMonths(LocalDate a, LocalDate b) {
long months = ChronoUnit.MONTHS.between(YearMonth.from(a), YearMonth.from(b));
return a.plusMonths(months).equals(b);
}

開心每一天1111
TA貢獻1836條經驗 獲得超13個贊
喬達時間如預期般運作:
Months.monthsBetween(org.joda.time.LocalDate.parse("2018-1-31"),org.joda.time.LocalDate.parse("2018-2-28")).getMonths() //1
添加回答
舉報
0/150
提交
取消