我有两个搜索参数的日期选择器,但我不能超过一周的搜索(服务器上的大部分负载)所以我想检查第一个日期是否在第二个日期之前,如果第一个日期和第二个日期相差不到7天。如果all都正确则返回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;}
}
但它会抛出一个null异常。我宣布cStart和cEnd所以我不知道它是什么......
答案 0 :(得分: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
(一周内的毫秒,按照上述公式)。
如果在NullPointerException
和cStart
非空时运行,则不应提供cEnd
。
答案 1 :(得分:0)
Eric的回答有效,可能是解决问题的最佳方法。
修复自己的代码;但是,您必须使用cEnd.get( Calendar.DAY_OF_MONTH )
代替cEnd.DAY_OF_MONTH
,以此类推其他内容。