0

我是 Java 新手

如何获得两 (2) 个 jdatechooser 之间的总月数?我已经对此进行了搜索,但日期已设置为代码,就我而言,我想通过 JDateChooser 输入日期。

我可以通过这段代码做到这一点,但如果年份发生变化,我无法计算我想在不使用JodaTime.

这是我的代码

    public void month(){
    int TotalMonth;
    Calendar toDate;
    Calendar fromDate; 
    int increment;

    Date dt1 = date1.getDate(); //datechooser 1
    Date dt2 = date2.getDate(); //datechooser 2



    fromDate = Calendar.getInstance();
    toDate = Calendar.getInstance();

    if(dt1.after(dt2))
    {
        fromDate.setTime(dt2);
        toDate.setTime(dt1);
    }
    else
    {
        fromDate.setTime(dt1);
        toDate.setTime(dt2);
    }
    increment = 0;

    TotalMonth = toDate.get(Calendar.MONTH) - (fromDate.get(Calendar.MONTH +  increment));

    jLabel2.setText(Integer.toString(age));

}
4

1 回答 1

2

JodaTime更简单,但是...

您需要从开始时间循环到结束时间,MONTH在每个循环中增加字段,而日期仍然在结束时间之前......

例如...

try {
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Calendar cal1 = Calendar.getInstance();
    cal1.setTime(sdf.parse("08/03/1972"));
    Calendar cal2 = Calendar.getInstance();
    cal2.setTime(sdf.parse("08/03/2014"));

    // Yes, you can use cal1, but I you might want
    // to preserve it for other reasons...
    Calendar cal3 = Calendar.getInstance();
    cal3.setTime(cal1.getTime());
    int months = 0;
    while (cal3.before(cal2)) {
        cal3.add(Calendar.MONTH, 1);
        months++;
    }

    System.out.println("Months = " + months);

} catch (ParseException exp) {
    exp.printStackTrace();
}

打印出来Months = 505

如果您更改cal208/04/1972,它将打印Months = 1

于 2014-08-27T05:57:37.460 回答