我正在尝试将dateFrom
和dateTo
的两个区间与filterFrom
进行比较,而filterTo
是否有更好的方法将两个区间与边框进行比较?如果dateFrom
的日期与filterFrom
相同或dateTo
的日期与filterTo
相同,则该方法应返回true。
代码
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateCompare {
public static void main(String[] args) {
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date filterFrom = dateFormat.parse("2017-01-02 08:00:00.0");
Date filterTo = dateFormat.parse("2017-01-02 09:00:00.0");
Date dateFrom = dateFormat.parse("2017-01-02 08:40:00.0");
Date dateTo = dateFormat.parse("2017-01-02 09:00:00.0");
boolean value = DateCompare.compareToIntervales(filterFrom, filterTo, dateFrom, dateTo);
System.out.println("value: " + value);
} catch (ParseException e) {
e.printStackTrace();
}
}
private static boolean compareToIntervales(Date filterFrom, Date filterTo, Date dateFrom, Date dateTo) {
if ((dateFrom.equals(filterFrom) || dateFrom.after(filterFrom))
&& (dateTo.equals(filterTo) || dateTo.before(filterTo))) {
return true;
} else {
return false;
}
}
}
答案 0 :(得分:1)
我假设这类似于航空公司允许您选择一系列日期 - 这些将是您的过滤器开始和结束 - 然后您将与您自己的日期进行比较。从本质上讲,您真正想做的就是检查开始日期和结束日期是否在filterFrom和filterTo
之内简单:
if (dateFrom >= filterFrom && dateTo >= filterFrom && dateFrom <= filterTo && dateTo <= filterTo) {
return true;
} else {
return false;
}
应该做的伎俩(这不是实际的代码,因为我不确定Date默认是否具有可比性,我认为你使用.after,.equals和.before就像你一样),但问题不是很清楚这是否是你想要的。
希望这会对你有所帮助。值得注意的是,由于时区的原因,我发现它通常最适合使用大多数语言内置的大纪元时间。 (自1970年1月1日起的时间)
另外,只是为了避免可怕:
if (this) {
return true;
} else {
return false;
}
只需将其替换为:
return (this);
至于比较,.after和.before是“左包含,右排他”所以
date1.after(date2)
返回date1&gt; date2 - 隐含地!(date1&lt; = date2)。我们可以用它来形成
!date2.after(date1)
返回包含日期1&gt; = date2。这可以通过以下方式显示:
!(date2 > date1)
,所以!!(date2 <= date1)
,所以(date2 <= date1)
,所以(date1 >= date2)
如果这不符合您的要求,或者您需要澄清,请给我发表评论,我会尽力帮助:)