在相同的情况下比较两个间隔

时间:2017-04-12 16:22:03

标签: java

我正在尝试将dateFromdateTo的两个区间与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;
        }

    }

}

1 个答案:

答案 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)

如果这不符合您的要求,或者您需要澄清,请给我发表评论,我会尽力帮助:)