java - 几个月过去了的功能没有给出正确的结果

标签 java

我有两个日期:(YYYY-dd-mm)

1)1960-11-11

2)1986-04-02

我有以下函数,旨在计算自任意日期以来经过的月份,以上两个是我的测试条件。此函数计算月份而不考虑当前月份。也就是说,只有在完整的一个月后才添加一个月。

功能是:

public static final int months(Date date1) {// tricky

        Calendar calFirst = Calendar.getInstance(); 
        calFirst.setTime(date1); 
        System.out.println(""+calFirst.getTime());


        Calendar calNow = Calendar.getInstance(); 
        calNow.setTime(getCurrentDate()); 
        System.out.println(calNow.getTime());


        int m2 = calNow.get(Calendar.YEAR) * 12 + calNow.get((Calendar.MONTH));
        System.out.println(calNow.get(Calendar.YEAR) * 12 );
        System.out.println(calNow.get(Calendar.MONTH));
        //23832

        int m1 = calFirst.get(Calendar.YEAR) * 12 + (calFirst.get(Calendar.MONTH));
        System.out.println(calFirst.get(Calendar.YEAR) * 12 );
        System.out.println(calFirst.get(Calendar.MONTH));
        //24168

        return Math.abs(m2 - (m1));
    }

1986-04-02 的结果:

Wed Apr 02 00:00:00 IST 1986
Wed Jan 08 00:00:00 IST 2014
24168
0
23832
3
333

哪个是正确的

1960 年 11 月 11 日的结果:

Fri Nov 11 00:00:00 IST 1960
Wed Jan 08 00:00:00 IST 2014
24168
0
23520
10
638

哪个是错误的。

有什么提示我哪里出错了吗?

Benchmark

最佳答案

我认为 333 和 638 都是很好的答案...

让我解释一下:

包括 1986 年 4 月至 12 月 = 9 个月 + 27 年 + 2014 年 0 个月 = 333。

同样的想法也适用于其他:

包含 1960 年 11 月至 12 月 = 2 个月 + 53 年 + 2014 年 0 个月 = 638。

从这个角度来看,这两个数字都是正确的:包括第一个月,排除上个月

关于java - 几个月过去了的功能没有给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992496/

相关文章:

java - JPA CriteriaBuilder 泛型错误 : CriteriaQuery<capture#2-of ? > 不适用于参数 (Expression<Long>)

java - 根据名称模式对字符串数组进行排序

java - 如何在Eclipse中配置从GIT导入的项目为Java项目?

java - 使用 jConsole 连接远程 tomcat JMX 实例

java - 在 hazelcast 和 Java 中以编程方式设置 Near Cache 验证 Near 缓存是否从本地缓存返回数据

java - 使用 Oracle 和 PostgreSQL 的长文本列 hibernate

Java调用重载方法

java - 如何在 Neo4j 中查找特定节点

java - Guice Request Scope 用于跟踪请求的工作流程

java - Maven 无法下载 jar 依赖项