java - 如何获取两个日期之间的天数 - `java.util.Calendar`

标签 java calendar jfxtras

<分区>

我正在尝试获取两个日期之间的天数。我在 JFXtras 的 Agenda 工作。

开始时间 = 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));
    }

//我的问题从这里开始 之后,我什么也没得到。打印以下内容:

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);
}

最佳答案

不是将 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));
} 

关于java - 如何获取两个日期之间的天数 - `java.util.Calendar`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24105380/

相关文章:

java - JFxtas Lcd 仪表最大值

java - VTD-XML Java 代码仅获取第一个元素

java - Java中内存高效的sliding()函数(类似于Scala的sliding())

android - java.lang.RuntimeException : Unable to start activity ComponentInfo 错误

javascript - 计算上个月

java - FXtras 议程 : set allowDragging property for individual appointments instead of whole agenda

java - 在 Android 中发布到 Twitter

java - 如何在 Apache HttpComponents 中使用自定义 socketfactory

java - 我正在用 java 编写一个日历程序,但除了 2015 年 10 月之外,月份不匹配,我需要帮助

Java将输入流转为URL