Tôi đã gặp phải nhu cầu tương tự và bắt đầu từ câu trả lời @ alain.janinm là tốt nhưng không cho kết quả chính xác trong một số trường hợp.
ví dụ:
Xem xét các tháng từ 17/02/2013 đến 11/03/2016 ("dd/MM/yyyy"
)
Kết quả Oracle:36,8064516129032
Phương thức
Java từ @ Alain.janinm answer:36.74193548387097
Đây là những thay đổi tôi đã thực hiện, để có được kết quả gần hơn với months_between()
của Oracle chức năng:
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;
}
Với hàm này, kết quả của lệnh gọi cho các ngày 17/02/2013 và 11/03/2016 là:36.806451612903224
Lưu ý:Theo hiểu biết của tôi months_between()
của Oracle hàm coi rằng tất cả các tháng đều dài 31 ngày