gpt4 book ai didi

java - Java 中 ORACLE 函数 MONTHS_BETWEEN 的模拟

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:06 25 4
gpt4 key购买 nike

Java 是否有一些类似于 Oracle 函数的MONTHS_BETWEEN

最佳答案

我遇到了同样的需求,从@alain.janinm 的回答开始,这个回答很好,但在某些情况下并没有给出完全相同的结果。
例如:

考虑 17/02/2013 和 11/03/2016 之间的月份 ("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;
}

使用此函数,日期 17/02/2013 和 11/03/2016 的调用结果为:36.806451612903224

注意:根据我的理解,Oracle 的 months_between() 函数认为所有月份都是 31 天

关于java - Java 中 ORACLE 函数 MONTHS_BETWEEN 的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9100543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com