java - 检查日期范围之间的日期是否也处理空值 Java

标签 java date date-comparison

我在 Java 中检查日期是否介于两个日期之间的标准方法如下所示:

public static boolean isWithinRange(Date date, Date startDate, Date endDate) {
    return !(date.before(startDate) || date.after(endDate));
}

我想在 startDate 或 endDate 上添加对空值的支持(意味着用户没有输入日期。如果 startDate 为空,我只想检查 endDate,如果 endDate 为空,我只想检查 startDate,如果两者都为空那么它是真的。我目前的解决方案是这样的:

public static boolean isWithinRange(Date date, Date startDate, Date endDate) {
    if (startDate == null && endDate == null) {
        return true;
    }

    if (!(startDate != null || !date.after(endDate))) {
        return true;
    }

    if (!(endDate != null || !date.before(startDate))) {
        return true;
    }

    return !(date.before(startDate) || date.after(endDate));
}

替代的更具可读性的例子:

public static boolean isWithinRange(Date date, Date startDate, Date endDate) {
    if (startDate == null && endDate == null) {
        return true;
    }

    if (startDate == null && date.before(endDate))) {
        return true;
    }

    if (endDate == null && date.after(startDate))) {
        return true;
    }

    return date.after(startDate) && date.before(endDate));
}

但感觉代码真的很糟糕。还有其他方法可以解决这个问题吗?

最佳答案

怎么样:

return (startDate == null || !date.before(startDate))
    && (endDate == null || !date.after(endDate));

这利用了这两个语句等价的事实:

!(date.before(startDate) || date.after(endDate))
!date.before(startDate) && !date.after(endDate)

事实上 || 是一个短路,可以防止 NullPointerExceptions。

关于java - 检查日期范围之间的日期是否也处理空值 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40261435/

相关文章:

java - 在 Java 11 上安装 tomcat 7 作为服务 :NB: JAVA_HOME should point to a JDK not a JRE

java - 错误: class "javax.persistence.PersistenceUtil"'s signer information does not match

ios - DateFormatter 返回错误的时间

JavaScript Date.prototype.toISOString() 丢失偏移量

objective-c - 日期验证

mysql - 从 MySQL 表中获取在某个日期或之前添加并在某个日期或之后删除的计数

java - 如何为许多具体类型创建抽象工厂

java - 如何以编程方式访问 Eclipse 中的选项卡式属性 View ?

java - 如何知道 Locale 使用的是 12 小时制还是 24 小时制?

c# - 仅显示 API 抓取数据后 90 天内的结果