Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算java日期差时出错_Java_Calendar_Java.util.date - Fatal编程技术网

计算java日期差时出错

计算java日期差时出错,java,calendar,java.util.date,Java,Calendar,Java.util.date,根据天数计算两个日期(java.util.Date)之间的差异看起来非常简单,我们可以找到不同的方法来实现这一点。我使用以下代码计算日期差: public static long daysBetween(Calendar startDate, Calendar endDate) { Calendar date = (Calendar) startDate.clone(); long daysBetween = 0; while (date.be

根据天数计算两个日期(
java.util.Date
)之间的差异看起来非常简单,我们可以找到不同的方法来实现这一点。我使用以下代码计算日期差:

  public static long daysBetween(Calendar startDate, Calendar endDate) {
        Calendar date = (Calendar) startDate.clone();
        long daysBetween = 0;
        while (date.before(endDate)) {
            date.add(Calendar.DAY_OF_MONTH, 1);
            daysBetween++;
        }
        return daysBetween;
    }
main()
中,我使用了以下两个日期:

    Calendar c1 = Calendar.getInstance();
    c1.set(2011, 1, 1);
    Calendar c2 = Calendar.getInstance();
    c2.set(2011, 1, 31);

    long difference = daysBetween(c1, c2); // 
但是变量
差异
的值不一致。有时是30,有时是31。那么,为什么会发生这种情况呢


是否有任何解决方案可以使用该方法获得一致的输出?

您只需设置年、月和日。小时、分钟、秒和毫秒是当前时间(因此每次运行时都不同)


我建议您改用Joda Time的LocalDate,因为它似乎完全符合您的要求。

您只需设置年、月和日。小时、分钟、秒和毫秒是当前时间(因此每次运行时都不同)

我建议您改用Joda Time的LocalDate,因为它似乎完全符合您的要求。

您正在设置日历的日期部分,而不是时间部分

有时时钟会在调用
getInstance()
之间滴答作响,有时则不会,因此不一致

选项:

  • 设置时间和日期,例如设置为午夜
  • 使用更好的日期/时间库--它具有更合适的表示形式(
    LocalDate
    )。这里一个重要的寓意是,如果你能找到一种能代表你所拥有的确切信息的类型,而不是其他类型,那么这可能是一个很好的匹配,并且会导致更少的并发症
使用
LocalDate
,您甚至不必进行循环,因为Joda Time对计算两个值之间的差异有很好的支持

LocalDate date1 = new LocalDate(2011, 1, 1);
LocalDate date2 = new LocalDate(2011, 1, 31);
Days period = Days.daysBetween(days1, days2);
int days = period.getDays();
您正在设置日历的日期部分,而不是时间部分

有时时钟会在调用
getInstance()
之间滴答作响,有时则不会,因此不一致

选项:

  • 设置时间和日期,例如设置为午夜
  • 使用更好的日期/时间库--它具有更合适的表示形式(
    LocalDate
    )。这里一个重要的寓意是,如果你能找到一种能代表你所拥有的确切信息的类型,而不是其他类型,那么这可能是一个很好的匹配,并且会导致更少的并发症
使用
LocalDate
,您甚至不必进行循环,因为Joda Time对计算两个值之间的差异有很好的支持

LocalDate date1 = new LocalDate(2011, 1, 1);
LocalDate date2 = new LocalDate(2011, 1, 31);
Days period = Days.daysBetween(days1, days2);
int days = period.getDays();

我跑了好几次,我只有30分,不是31分。我跑了好几次,我只有30分,不是31分。