java - 相互检查两个日历,看看它们是否相隔一周以上

标签 java android

我有两个用于搜索参数的日期选择器,但我的搜索不能超过一周(服务器上的负载很大),所以我想检查第一个日期是否在第二个日期之前,以及第一个日期是否在和第二次约会相隔不到 7 天。如果全部正确,则返回 true boolean 值(如果不为 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(一周内的毫秒数,根据上述公式)。

如果在 cStartcEnd 为非空时运行,则不应提供 NullPointerException

关于java - 相互检查两个日历,看看它们是否相隔一周以上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12964783/

相关文章:

java - 从 Java 创建快捷方式文件

android - 滑动标签 - NullPointerException - Toolbar.getTitle()

android - Firebase/Fabric Crashlytics 和 Proguard/R8

java - 在 Android 中使用相机

带有 finalize 的 Java 内存泄漏检测

Java 游戏在启动时崩溃两次,没有错误消息

java - 我应该在 UML 中表示 Java 实用类吗?

java - 是否可以在单个 JPOS 实例中为多个客户端监听多个端口?

android - PrintedPdfDocument 总是导致损坏的 PDF

android - OnChildClickListener 消失