检查时间(开始日期和结束日期)是否削减了一个时间段
Check if time (startdate & enddate) cuts a time period
如何检查给定的开始日期和结束日期是否缩短了特定时间段(火车时间)。
我做了以下操作:
if ((startdate >= train.getStartDate()) &&
(enddate <= train.getEndDate())) {
// doSomething();
}
doSomething()
仅在给定时间段之间的时间准确时才执行。但我还希望 doSomething()
在时间重叠时被执行。
例如:
- 开始日期:14.10.2015 15.00
- 结束日期:16.10.2015 17.00
- 时间段:15.10.2015 10.00 - 19.10.2015 10.00
在这种情况下它是重叠的,我希望 doSomething()
得到执行。有什么解决办法吗?
如果您想坚持使用长值,我会执行以下操作
if (!((train.getEndDate() < startdate) || (train.getStartDate() > enddate))) {...}
或者,您可能希望将 long
-vales 转换为 java.util.Date
(new Date(long value)
),以便您可以使用 Date-class.
还有一个很好用的Joda time 2.2 API,它有一个Interval
-class,提供了下面的功能
overlap(ReadableInterval interval)
Gets the overlap between this interval and another interval.
日期有 after
和 before
方法
if (yourDate.after(startDate) && yourDate.before(endDate)) {
//doSomething
}
您也可以尝试使用 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);
}
}
如何检查给定的开始日期和结束日期是否缩短了特定时间段(火车时间)。
我做了以下操作:
if ((startdate >= train.getStartDate()) &&
(enddate <= train.getEndDate())) {
// doSomething();
}
doSomething()
仅在给定时间段之间的时间准确时才执行。但我还希望 doSomething()
在时间重叠时被执行。
例如:
- 开始日期:14.10.2015 15.00
- 结束日期:16.10.2015 17.00
- 时间段:15.10.2015 10.00 - 19.10.2015 10.00
在这种情况下它是重叠的,我希望 doSomething()
得到执行。有什么解决办法吗?
如果您想坚持使用长值,我会执行以下操作
if (!((train.getEndDate() < startdate) || (train.getStartDate() > enddate))) {...}
或者,您可能希望将 long
-vales 转换为 java.util.Date
(new Date(long value)
),以便您可以使用 Date-class.
还有一个很好用的Joda time 2.2 API,它有一个Interval
-class,提供了下面的功能
overlap(ReadableInterval interval)
Gets the overlap between this interval and another interval.
日期有 after
和 before
方法
if (yourDate.after(startDate) && yourDate.before(endDate)) {
//doSomething
}
您也可以尝试使用 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);
}
}