Сблъсках се със същата нужда и започнах от @alain.janinm отговор, който е добър, но не дава точно същия резултат в някои случаи.
напр.:
Помислете за месеци между 17/02/2013 и 11/03/2016 ("dd/MM/yyyy"
)
Резултат от Oracle:36,8064516129032
Java метод от @Alain.janinm отговор:36.74193548387097
Ето промените, които направих, за да получа по-близък резултат до months_between()
на Oracle функция :
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
Забележка:Доколкото разбирам months_between()
на Oracle функция счита, че всички месеци са дълги 31 дни