检查时间(开始日期和结束日期)是否缩短了时间段

时间:2015-10-14 09:18:32

标签: java time period

如何查看给定的开始日期和时间? enddate削减特定时间段(火车时间)。

我做了以下事情:

if ((startdate >= train.getStartDate()) &&
 (enddate <= train.getEndDate())) {
   // doSomething();
}

doSomething()仅在给定时间段之间的时间确切时才执行。但是,当时间重叠时,我也希望doSomething()执行。

例如:

  • Startdate:14.10.2015 15.00
  • Enddate:16.10.2015 17.00
  • 时间段:15.10.2015 10.00 - 19.10.2015 10.00

在这种情况下它的重叠,我想要doSomething()执行。任何解决方案?

3 个答案:

答案 0 :(得分:0)

如果你想坚持使用长值,我会做以下

if (!((train.getEndDate() < startdate) || (train.getStartDate() > enddate))) {...}

或者,您可能希望将long - vales转换为java.util.Datenew Date(long value)),以便您可以使用Date类。

还有非常好的Joda time 2.2 API,它有Interval - 类,提供以下功能

overlap(ReadableInterval interval)
      Gets the overlap between this interval and another interval.

答案 1 :(得分:0)

日期有afterbefore方法

    if (yourDate.after(startDate) && yourDate.before(endDate)) {
        //doSomething
    }

答案 2 :(得分:0)

您也可以尝试使用Guava Ranges。这是一个例子:

public class RangesTest {

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH.mm");

@Test
public void testDateRange() throws ParseException {
    Range<Date> timePeriod = createClosedDateRange("15.10.2015 10.00","19.10.2015 10.00");

    assertTrue(timePeriod.isConnected(createClosedDateRange("14.10.2015 15.00", "16.10.2015 17.00")));
    assertTrue(timePeriod.isConnected(createClosedDateRange("14.10.2015 15.00", "20.10.2015 17.00")));
    assertFalse(timePeriod.isConnected(createClosedDateRange("14.10.2015 15.00", "15.10.2015 09.59")));
    assertFalse(timePeriod.isConnected(createClosedDateRange("20.10.2015 17.01", "21.10.2015 17.00")));
}

private Range<Date> createClosedDateRange(String startDate, String endDate) throws ParseException {
    Date startdate= sdf.parse(startDate);
    Date enddate = sdf.parse(endDate);
    return Range.closed(startdate, enddate);
}

}