在Java中检查日期是否在两个日期之间
我想知道的一件事是,如何计算从今天起10天后的日期。
第二件事是检查一个日期是否在另外两个日期之间。例如,假设我有一个应用,它显示我在接下来的 10 天内需要执行哪些事件(计划程序)。现在,如何查看分配给某个事件的日期是否介于今天和距今天 10 天的日期之间?
我想知道的一件事是,如何计算从今天起10天后的日期。
第二件事是检查一个日期是否在另外两个日期之间。例如,假设我有一个应用,它显示我在接下来的 10 天内需要执行哪些事件(计划程序)。现在,如何查看分配给某个事件的日期是否介于今天和距今天 10 天的日期之间?
使用和比较日期是非常痛苦的,这就是为什么JodaTime存在的原因。到目前为止,没有一个答案涵盖了所讨论的时间。当日期具有非零时间时,比较可能会失败。目前还不清楚你是想要一个包容性的比较还是排他性的比较。到目前为止发布的大多数答案都表明存在排他性比较(即5月24日不是在5月20日至5月24日之间),而实际上,将其包括在内更有意义(即5月24日介于5月20日至5月24日之间)。java.util.Date
java.util.Calendar
我想知道的一件事是,如何计算从今天起10天后的日期。
使用标准的Java SE 6 API,您需要java.util.Calendar
来实现此目的。
Calendar plus10days = Calendar.getInstance();
plus10days.add(Calendar.DAY_OF_YEAR, 10);
使用JodaTime,你会这样做:
DateTime plus10days = new DateTime().plusDays(10);
第二件事是检查一个日期是否在另外两个日期之间。例如,假设我有一个应用,它显示我在接下来的 10 天内需要执行哪些事件(计划程序)。现在,如何查看分配给某个事件的日期是否介于今天和距今天 10 天的日期之间?
现在是可怕的部分与.让我们先做好准备:Calendar
Calendar now = Calendar.getInstance();
Calendar plus10days = Calendar.getInstance();
plus10days.add(Calendar.DAY_OF_YEAR, 10);
Calendar event = Calendar.getInstance();
event.set(year, month - 1, day); // Or setTime(date);
为了可靠地比较使用 和 ,我们需要先摆脱时间。想象一下,现在是2010年5月24日上午9点,活动日期设置为2010年5月24日,没有时间。当您想要包容性比较时,您希望在同一天进行比较。即,两者或 - 更短但相等 - 都应返回 true。但实际上,由于中时间的存在,没有一个这样做。您需要先清除所有日历实例中的时间,如下所示:Calendar#before()
Calendar#after()
return true
(event.equals(now) || event.after(now))
(!event.before(now))
now
calendar.clear(Calendar.HOUR);
calendar.clear(Calendar.HOUR_OF_DAY);
calendar.clear(Calendar.MINUTE);
calendar.clear(Calendar.SECOND);
calendar.clear(Calendar.MILLISECOND);
或者,您也可以仅按日/月/年进行比较。
if (event.get(Calendar.YEAR) >= now.get(Calendar.YEAR)
&& event.get(Calendar.MONTH) >= now.get(Calendar.MONTH)
&& event.get(Calendar.DAY_OF_MONTH) >= now.get(Calendar.DAY_OF_MONTH)
{
// event is equal or after today.
}
非常详细。
使用JodaTime,你可以只使用DateTime#toLocalDate()
来获取日期部分:
LocalDate now = new DateTime().toLocalDate();
LocalDate plus10days = now.plusDays(10);
LocalDate event = new DateTime(year, month, day, 0, 0, 0, 0).toLocalDate();
if (!event.isBefore(now) && !event.isAfter(plus10days)) {
// Event is between now and 10 days (inclusive).
}
是的,以上就是您需要做的所有事情。
public static boolean between(Date date, Date dateStart, Date dateEnd) {
if (date != null && dateStart != null && dateEnd != null) {
if (date.after(dateStart) && date.before(dateEnd)) {
return true;
}
else {
return false;
}
}
return false;
}
编辑:另一个建议的变体:
public Boolean checkDate(Date startDate, Date endDate, Date checkDate) {
Interval interval = new Interval(new DateTime(startDate),
new DateTime(endDate));
return interval.contains(new DateTime(checkDate));
}