gpt4 book ai didi

java 。 GregorianCalendar 以月为单位的日期差异无法正常工作

转载 作者:行者123 更新时间:2023-12-01 07:18:02 26 4
gpt4 key购买 nike

java 6.0

假设今天是:2018 年 8 月 8 日

此处方法返回 2 个日期的月差。

    public static Integer getDiffMonths(Date dateFrom, Date dateTo) {
Calendar cal1 = new GregorianCalendar();
cal1.setTime(dateFrom);
Calendar cal2 = new GregorianCalendar();
cal2.setTime(dateTo);
return differenceInMonths(cal1, cal2);
}

private static Integer differenceInMonths(Calendar dateFrom, Calendar dateTo) {
int month1 = dateFrom.get(Calendar.YEAR) * 12 + dateFrom.get(Calendar.MONTH);
int month2 = dateTo.get(Calendar.YEAR) * 12 + dateTo.get(Calendar.MONTH);
int diff = month2 - month1;
return diff;
}

这里是 4 个测试用例的结果:

1.

currentDate = Aug 08 2018
DateTo = Aug 13 2018
diffMonth = 0

2.

currentDate = Aug 08 2018
DateTo = Oct 14 2018
diffMonth = 2

3.

currentDate = Aug 08 2018
DateTo = Jan 03 2019
diffMonth = 5

错误:差异必须为 4 个月

4.

currentDate = Aug 08 2018
DateTo = Aug 03 2019
diffMonth = 12

错误:差异必须为 11 个月

正如您所见,测试用例 #1 和 #2 是正确的,但测试用例 #3 和 #4 是不正确的。

为什么?

最佳答案

计算差异时你完全忽略了这一天。因此 1 月 1 日与 1 月 31 日相同。

前两个案例恰好在第二个日期有更大的日子,最后两个案例有较小的日子。但此信息被忽略。

关于 java 。 GregorianCalendar 以月为单位的日期差异无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51748409/

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