我想知道的一件事是如何计算从今天起10天的日期.
第二件事是检查一个日期是否在另外两个日期之间.例如,假设我有一个应用程序,显示我在接下来的10天内需要做的事情(计划员).现在,我如何查看我分配给活动的日期是在今天和今天之后的10天之间?
Bal*_*usC 20
操纵和比较日期使用java.util.Date和java.util.Calendar非常痛苦,这就是JodaTime存在的原因.到目前为止,没有一个答案涵盖了有关时间.当日期具有非零时间时,比较可能失败.还不清楚您是否想要包容性或独家比较.到目前为止发布的大多数答案都建议进行独家比较(即5月24日不是 5月20日到5月24日之间),而实际上将其包含在内是更有意义的(即5月24日是 5月20日到5月24日之间).
我想知道的一件事是如何计算从今天起10天的日期.
使用标准的Java SE 6 API,您需java.util.Calendar要这样做.
Calendar plus10days = Calendar.getInstance();
plus10days.add(Calendar.DAY_OF_YEAR, 10);
Run Code Online (Sandbox Code Playgroud)
有了JodaTime,你会这样做:
DateTime plus10days = new DateTime().plusDays(10);
Run Code Online (Sandbox Code Playgroud)
第二件事是检查一个日期是否在另外两个日期之间.例如,假设我有一个应用程序,显示我在接下来的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);
Run Code Online (Sandbox Code Playgroud)
为了可靠地比较使用Calendar#before()和Calendar#after(),我们需要先摆脱时间.想象一下,它目前是2010年5月24日上午9点,该活动的日期定在2010年5月24日,没有时间.当您想要包容性比较时,您希望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);
Run Code Online (Sandbox Code Playgroud)
或者,您也可以仅在日/月/年进行比较.
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.
}
Run Code Online (Sandbox Code Playgroud)
所有人都非常冗长.
使用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).
}
Run Code Online (Sandbox Code Playgroud)
是的,上面真的是所有你需要做的.
Kri*_*nan 15
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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:另一个建议的变体:
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));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64388 次 |
| 最近记录: |