如何获得两个日期之间的天数 - “java.util.Calendar”

时间:2014-06-08 10:49:08

标签: java calendar jfxtras

我试图获得两个日期之间的天数。我在Agenda,JFXtras工作。

开始时间 = getStartTime()返回java.util.Calendar
结束时间 = getEndTime()会返回java.util.Calendar

这是我到目前为止所得到的:

void printAppointment(Appointment a) throws ParseException {
        System.out.println(a.getSummary());
        System.out.println(a.getDescription());

        DateFormat formatter = new SimpleDateFormat("yyyy, MMM dd h:mm:ss a z");
        System.out.println(formatter.format(a.getStartTime().getTime()));
        System.out.println(formatter.format(a.getEndTime().getTime()));
        System.out.println(a.getAppointmentGroup());
        System.out.println(a.getLocation());

        // My problem starts here
        Calendar cal1 = new GregorianCalendar();
        Calendar cal2 = new GregorianCalendar();

        SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");

        Date date = sdf.parse(formatter.format(a.getStartTime().getTime()));
        cal1.setTime(date);
        date = sdf.parse(formatter.format(a.getEndTime().getTime()));
        cal2.setTime(date);
        // System.out.println("Days difference = " + daysBetween(cal1.getTime(), cal2.getTime()));
        System.out.println("Days difference = can't be set");
    }

    private int daysBetween(Date d1, Date d2) {
        return (int) ((d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));
    }

// My problem starts here之后我什么都没得到。打印出以下内容:

Another Morning appointment
Another Description of morning appointment
2014, Jun 12 6:00:00 AM PDT
2014, Jun 13 2:00:00 AM PDT
jfxtras.labs.scene.control.Agenda$AppointmentGroupImpl@16e4577
null

请注意,天数差异被遗漏。

如果有人能帮助我,我会非常感激。谢谢大家。

更新

这是最终的工作实现,它可以在下面的尝试中显示天数,小时数,分钟数和秒数之间的差异。

Pel
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget ti
2014. Jun Mon.9 3:18PM
2014. Jun Wed.11 3:18PM
jfxtras.labs.scene.control.Agenda$AppointmentGroupImpl@12e3872
null
diffSeconds difference = 172800
diffMinutes difference = 2880
diffHours difference = 48
diffDays difference = 2

这是执行该操作的代码

void printAppointment(Appointment a) {
    System.out.println(a.getSummary());
    System.out.println(a.getDescription());

    DateFormat formatter = new SimpleDateFormat("yyyy. MMM EEE.d h:mma");
    System.out.println(formatter.format(a.getStartTime().getTime()));
    System.out.println(formatter.format(a.getEndTime().getTime()));
    System.out.println(a.getAppointmentGroup());
    System.out.println(a.getLocation());
    this.daysBetween(a.getStartTime().getTimeInMillis(), a.getEndTime().getTimeInMillis());

}

private void daysBetween(long t1, long t2) {
    int diff = (int) (t2 - t1);

    long diffSeconds = diff / 1000;
    long diffMinutes = diff / (60 * 1000);
    long diffHours = diff / (60 * 60 * 1000);
    long diffDays = diff / (24 * 60 * 60 * 1000);

    System.out.println("diffSeconds difference = " + diffSeconds);
    System.out.println("diffMinutes difference = " + diffMinutes);
    System.out.println("diffHours difference = " + diffHours);
    System.out.println("diffDays difference = " + diffDays);
}

2 个答案:

答案 0 :(得分:5)

不是将Date传递给daysBetween,而是传递一个long。您可以使用getTimeInMillis()从日历中获取当前时间(自1970年1月1日起)。您的代码现在看起来如下:

void printAppointment(Appointment a) throws ParseException {
    System.out.println(a.getSummary());
    System.out.println(a.getDescription());

    System.out.println(formatter.format(a.getStartTime().getTime()));
    System.out.println(formatter.format(a.getEndTime().getTime()));
    System.out.println(a.getAppointmentGroup());
    System.out.println(a.getLocation());


    System.out.println("Days difference = " + daysBetween(a.getStartTime().getTimeInMillis(), a.getEndTime().getTimeInMillis()));
}

private int daysBetween(long t1, long t2) {
    return (int) ((t2 - t1) / (1000 * 60 * 60 * 24));
} 

答案 1 :(得分:1)

如果您被允许使用Java 8,那么您应该查看来自https://stackoverflow.com/users/288671/vitalii-fedorenko的问题Difference in days between two dates in Java?的答案

在Java 8中引入新API有几个原因 - 正确处理时差是其中一个原因。 (在某些时区可能存在影响计算的变化 - 因此,如果有白天调整或类似的事情,只需将毫秒差异除以将导致意外结果)