Jeg er stødt på det samme behov og er gået ud fra @alain.janinm svar, som er godt, men i nogle tilfælde ikke giver præcis samme resultat.
eks:
Overvej måneder mellem 17/02/2013 og 11/03/2016 ("dd/MM/yyyy"
)
Oracle-resultat:36,8064516129032
Java-metode fra @Alain.janinm svar :36.74193548387097
Her er de ændringer, jeg lavede, for at komme tættere på Oracles months_between()
funktion :
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;
}
Med denne funktion er resultatet af opkaldet for datoerne 17/02/2013 og 11/03/2016:36.806451612903224
Bemærk:Efter min forståelse er Oracles months_between()
funktion vurderer, at alle måneder er 31 dage lange