我有两个日期选择器用于搜索参数,但是我不能在一周以上的时间内进行搜索(服务器负载很大),因此我想检查第一个日期是否在第二个日期之前,以及第一个日期和第二个日期相距不到7天。如果一切正确,则返回true布尔值(如果不是false)。

public Calendar max = Calendar.getInstance();

public boolean checkweek(Calendar cStart, Calendar cEnd) {
    Toast.makeText(this,
            cStart.DAY_OF_MONTH + " - " + cStart.MONTH + " - " + cStart.YEAR, Toast.LENGTH_LONG).show();
    if (cEnd.after(cStart) || ((cEnd.DAY_OF_MONTH == cStart.DAY_OF_MONTH) && (cEnd.MONTH == cStart.MONTH))) {
        max.set(Calendar.YEAR, cStart.YEAR);
        max.set(Calendar.MONTH, cStart.MONTH);
        max.set(Calendar.DAY_OF_MONTH, cStart.DAY_OF_MONTH);
        max.add(Calendar.DAY_OF_MONTH, 7);
        Toast.makeText(this,
                max.DAY_OF_MONTH + " - " + max.MONTH + " - " + max.YEAR,
                Toast.LENGTH_LONG).show();
        if (cEnd.before(max)) {
            return true;
        }
        else{
            return false;
        }
    }
    else{
    return false;}
}


但是它抛出一个空异常。我在声明cStart和cEnd,所以我不知道它是什么...

最佳答案

为什么不为此使用数学呢?

cEnd.getTimeInMillis() - cStart.getTimeInMillis() > (7L * 24L * 60L * 60L * 1000L)


或者,感谢@Sam,您可以使用DateUtils.WEEK_IN_MILLIS使其更简单:

cEnd.getTimeInMillis() - cStart.getTimeInMillis() > DateUtils.WEEK_IN_MILLIS


工作原理:Calendar.getTime().getTime()将返回毫秒值的long。只需减去它们(以得到差值),然后检查它是否大于604800000L(根据上述公式,一周中的毫秒数)。

如果在NullPointerExceptioncStart不为空的情况下运行,则不应提供任何cEnd

10-08 15:16