私は同じニーズに遭遇し、@ alain.janinmの回答から始めました。これは良いことですが、場合によってはまったく同じ結果が得られないこともあります。
ex:
2013年2月17日から2016年3月11日までの月を検討してください("dd/MM/yyyy"
)
Oracleの結果:36,8064516129032
@ Alain.janinmのJavaメソッド回答: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;
}
この関数を使用すると、2013年2月17日と2016年3月11日の日付の呼び出しの結果は次のようになります:36.806451612903224
注:私の理解では、Oracleのmonths_between()
関数は、すべての月が31日であると見なします