我在 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/