Ich bin auf das gleiche Bedürfnis gestoßen und habe mit der Antwort von @alain.janinm begonnen, die gut ist, aber in einigen Fällen nicht genau das gleiche Ergebnis liefert.
Beispiel:
Betrachten Sie die Monate zwischen dem 17.02.2013 und dem 11.03.2016 ("dd/MM/yyyy"
). )
Oracle-Ergebnis:36,8064516129032
Java-Methode von @Alain.janinm Antwort:36.74193548387097
Hier sind die Änderungen, die ich vorgenommen habe, um ein näheres Ergebnis an Oracles months_between()
zu erhalten 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;
}
Mit dieser Funktion ist das Ergebnis des Aufrufs für die Daten 17.02.2013 und 11.03.2016:36.806451612903224
Hinweis:Nach meinem Verständnis Oracles months_between()
Funktion berücksichtigt, dass alle Monate 31 Tage lang sind