检查日期是在Java中的两个日期之间
我想知道的一件事是如何计算从今天起10天后的日期。检查日期是在Java中的两个日期之间
第二件事是检查一个日期是否在两个其他日期之间。 例如,假设我有一个应用程序,显示我需要在接下来的10天内(计划者)执行哪些事件。现在如何查看我分配给活动的日期是否在今天和距离今天10天的日期之间?
您可以使用以前,后和的compareTo日期类的方法。
我这里还有一些例子
http://www.roseindia.net/java/example/java/util/CompareDate.shtml
http://www.javafaq.nu/java-example-code-287.html
http://www.esus.com/javaindex/j2se/jdk1.2/javautil/dates/comparingdates.html
而这里的API上日期类
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html
祝你好运!
要添加十天
Date today = new Date();
Calendar cal = new GregorianCalendar();
cal.setTime(today);
cal.add(Calendar.DAY_OF_YEAR, 10);
要检查两个日期之间:
myDate.after(firstDate) && myDate.before(lastDate);
操纵和比较日期和java.util.Calendar
是相当痛苦,这就是为什么JodaTime存在。迄今没有任何答案涵盖了时间有问题。当日期的时间非零时,比较可能会失败。目前还不清楚你是否想要包括或独家比较。大多数发布至今建议独家对比的答案(即5月24日是5月20日和5月24日之间未),而在实际它会更有意义,使其包容(五月即24 是五月 20日和5月24日)。
有一两件事我想知道的是如何计算何日会是从今天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);
为了可靠地使用Calendar#before()
和Calendar#after()
比较,我们需要先被干掉的时间。想象一下,现在是2010年5月24日上午9点,而且事件的日期是2010年5月24日,没有时间。当您想要包含比较时,您想在同一天制作return true
。即(event.equals(now) || event.after(now))
或-shorter,但同样-应该返回true。但实际上没有一个是由于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));
}
我把最初的回答,并修改它一下。我认为,如果日期是等于为“内部” ..
private static boolean between(Date date, Date dateStart, Date dateEnd) {
if (date != null && dateStart != null && dateEnd != null) {
return (dateEqualOrAfter(date, dateStart) && dateEqualOrBefore(date, dateEnd));
}
return false;
}
private static boolean dateEqualOrAfter(Date dateInQuestion, Date date2)
{
if (dateInQuestion.equals(date2))
return true;
return (dateInQuestion.after(date2));
}
private static boolean dateEqualOrBefore(Date dateInQuestion, Date date2)
{
if (dateInQuestion.equals(date2))
return true;
return (dateInQuestion.before(date2));
}
要检查日期是两个日期之间,这里是简单的程序:
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
String oeStartDateStr = "04/01/";
String oeEndDateStr = "11/14/";
Calendar cal = Calendar.getInstance();
Integer year = cal.get(Calendar.YEAR);
oeStartDateStr = oeStartDateStr.concat(year.toString());
oeEndDateStr = oeEndDateStr.concat(year.toString());
Date startDate = sdf.parse(oeStartDateStr);
Date endDate = sdf.parse(oeEndDateStr);
Date d = new Date();
String currDt = sdf.format(d);
if((d.after(startDate) && (d.before(endDate))) || (currDt.equals(sdf.format(startDate)) ||currDt.equals(sdf.format(endDate)))){
System.out.println("Date is between 1st april to 14th nov...");
}
else{
System.out.println("Date is not between 1st april to 14th nov...");
}
}
+1特别是如果你正在做简单的日期(而不是日期时间)计算,JodaTime的LocalDate类为您提供了所有您需要的内容。 – leonbloy 2010-05-24 13:24:38