0

我有两个用于搜索参数的日期选择器,但我不能超过一周的搜索(服务器上的负载很大)所以我想检查第一个日期是否在第二个日期之前,以及第一个日期和第二个日期是否相隔不到 7 天。如果一切都正确,则返回一个真正的布尔值,如果不是假的。

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 所以我不知道它是什么......

4

2 回答 2

2

为什么不直接使用数学呢?

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(一周中的毫秒,根据上述公式)。

这应该提供 no NullPointerExceptionif run whencStart并且cEnd是非空的。

于 2012-10-18T22:36:16.913 回答
0

埃里克的答案很有效,可能是解决您问题的最佳方法。

修复您自己的代码;但是,对于其余的部分,您必须使用cEnd.get( Calendar.DAY_OF_MONTH )而不是cEnd.DAY_OF_MONTH等等。

于 2012-10-18T22:38:57.687 回答