增加比较时间范围的工具方法

This commit is contained in:
fengbaoheng 2022-09-04 00:03:17 +08:00
parent b495a50f28
commit 5d148eb2e3
2 changed files with 96 additions and 0 deletions

View File

@ -451,6 +451,75 @@ public class LocalDateTimeUtil {
return Period.between(startTimeInclude, endTimeExclude);
}
/**
* 判断指定时间time是否在开始时间startTime和结束时间endTime范围内
* <p>
* 通过isIncludeStart, isIncludeEnd参数控制时间范围区间是否为开区间
* <p>
* 例如传入参数isIncludeStart=true, isIncludeEnd=false
* <p>
* 则本方法会判断 time (start, end] 是否成立
*
* @param time 被比较的时间
* @param start 开始时间, 应小于等于结束时间
* @param end 结束时间应大于等于开始时间
* @param isIncludeStart 时间范围是否包含开始时间
* @param isIncludeEnd 时间范围是否包含结束时间
* @return true-在范围内false-不在范围内
* @author FengBaoheng
* @since 5.8.6
*/
public static boolean isBetween(LocalDateTime time, LocalDateTime start, LocalDateTime end,
boolean isIncludeStart, boolean isIncludeEnd) {
// 先判断是否满足 time (start, end)
boolean isBetween = time.isAfter(start) && time.isBefore(end);
// 若不满足则再判断是否在时间范围的边界上
if (!isBetween && isIncludeStart) {
isBetween = time.equals(start);
}
if (!isBetween && isIncludeEnd) {
isBetween = time.equals(end);
}
return isBetween;
}
/**
* 判断指定时间time是否在开始时间startTime和结束时间endTime范围内
* <p>
* 也即判断 time [startTime, endTime] 是否成立
*
* @param time 被比较的时间
* @param startTime 开始时间, 应小于等于结束时间
* @param endTime 结束时间应大于等于开始时间
* @return true-在范围内false-不在范围内
* @author FengBaoheng
* @since 5.8.6
*/
public static boolean isBetween(LocalDateTime time, LocalDateTime startTime, LocalDateTime endTime) {
return isBetween(time, startTime, endTime, true, true);
}
/**
* 判断当前时间默认时区是否在开始时间startTime和结束时间endTime范围内
* <p>
* 也即判断 当前时间 [startTime, endTime] 是否成立
*
* @param startTime 开始时间, 应小于等于结束时间
* @param endTime 结束时间应大于等于开始时间
* @return true-在范围内false-不在范围内
* @author FengBaoheng
* @since 5.8.6
*/
public static boolean isBetween(LocalDateTime startTime, LocalDateTime endTime) {
return isBetween(LocalDateTimeUtil.now(), startTime, endTime);
}
/**
* 修改为一天的开始时间例如2020-02-02 00:00:00,000
*

View File

@ -139,6 +139,33 @@ public class LocalDateTimeUtilTest {
Assert.assertEquals(365, between.toDays());
}
@Test
public void isBetween() {
// 时间范围 8点-9点
LocalDateTime start = LocalDateTime.parse("2019-02-02T08:00:00");
LocalDateTime end = LocalDateTime.parse("2019-02-02T09:00:00");
// 不在时间范围内 用例
Assert.assertFalse(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-02T06:00:00"), start, end));
Assert.assertFalse(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-02T13:00:00"), start, end));
Assert.assertFalse(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-01T08:00:00"), start, end));
Assert.assertFalse(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-03T09:00:00"), start, end));
// 在时间范围内 用例
Assert.assertTrue(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-02T08:00:00"), start, end));
Assert.assertTrue(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-02T08:00:01"), start, end));
Assert.assertTrue(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-02T08:11:00"), start, end));
Assert.assertTrue(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-02T08:22:00"), start, end));
Assert.assertTrue(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-02T08:59:59"), start, end));
Assert.assertTrue(LocalDateTimeUtil.isBetween(LocalDateTime.parse("2019-02-02T09:00:00"), start, end));
// 测试边界条件
Assert.assertTrue(LocalDateTimeUtil.isBetween(start, start, end, true, false));
Assert.assertFalse(LocalDateTimeUtil.isBetween(start, start, end, false, false));
Assert.assertTrue(LocalDateTimeUtil.isBetween(end, start, end, false, true));
Assert.assertFalse(LocalDateTimeUtil.isBetween(end, start, end, false, false));
}
@Test
public void beginOfDayTest() {
final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");