मैंने उसी आवश्यकता में भाग लिया है और @ alain.janinm उत्तर से शुरू किया है जो अच्छा है लेकिन कुछ मामलों में सटीक वही परिणाम नहीं देता है।
उदा :
17/02/2013 और 11/03/2016 के बीच के महीनों पर विचार करें ("dd/MM/yyyy"
)
Oracle परिणाम:36,8064516129032
@Alain.janinm उत्तर से जावा विधि:36.74193548387097
Oracle के months_between()
के निकट परिणाम प्राप्त करने के लिए मैंने जो परिवर्तन किए हैं, वे यहां दिए गए हैं समारोह :
public static double monthsBetween(Date startDate, Date endDate){
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
int startDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
int startMonth = cal.get(Calendar.MONTH);
int startYear = cal.get(Calendar.YEAR);
cal.setTime(endDate);
int endDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
int endMonth = cal.get(Calendar.MONTH);
int endYear = cal.get(Calendar.YEAR);
int diffMonths = endMonth - startMonth;
int diffYears = endYear - startYear;
int diffDays = endDayOfMonth - startDayOfMonth;
return (diffYears * 12) + diffMonths + diffDays/31.0;
}
इस फ़ंक्शन के साथ दिनांक 17/02/2013 और 11/03/2016 के लिए कॉल का परिणाम है:36.806451612903224
नोट:मेरी समझ से Oracle के months_between()
फ़ंक्शन मानता है कि सभी महीने 31 दिन लंबे होते हैं