Saya mengalami kebutuhan yang sama dan mulai dari jawaban @alain.janinm yang bagus tetapi tidak memberikan hasil yang sama persis dalam beberapa kasus.
misal :
Pertimbangkan bulan antara 17/02/2013 dan 11/03/2016 ("dd/MM/yyyy"
)
Hasil Oracle :36,8064516129032
Metode Java dari @Alain.janinm jawaban :36.74193548387097
Inilah perubahan yang saya buat, untuk mendapatkan hasil yang lebih dekat dengan months_between()
Oracle fungsi :
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;
}
Dengan fungsi ini hasil pemanggilan tanggal 17/02/2013 dan 11/03/2016 adalah :36.806451612903224
Catatan:Dari pemahaman saya months_between()
Oracle Oracle fungsi menganggap bahwa semua bulan adalah 31 hari