所以应该只有一个比较硬编码的给出间隔数字30
而已,当然从某种意义说LocalTime.MIN
和LocalTime.MAX
也是硬编码,也是给出的数字,只不过恰好换了个已有的变量而已,不过关键是下面的处理
所以换句话说,就可以写一个方法,给定开始时间,结束时间,时间间隔的分钟数,最后得到间隔的所有时间了
public static void main(String[] args) {
// 1.LocalTime.MIN 可以参考源码 00:00
// 2. LocalTime.MAX可以参考源码
23:59:59.999999999
// 1.30l 相隔多超时间
groupByInterval(LocalTime.MIN, LocalTime.MAX, ChronoUnit.MINUTES, 30l);
}
private static List<LocalTime> groupByInterval(LocalTime begin, LocalTime end, TemporalUnit intervalUnit, long intervalValue){
long between = begin.until(end, intervalUnit);
BigDecimal decimal = new BigDecimal(between);
BigDecimal in = new BigDecimal(intervalValue);
BigDecimal divide = decimal.divide(in,2,BigDecimal.ROUND_HALF_UP);
List<LocalTime> list = Stream.iterate(LocalTime.MIN, seed -> seed.plusMinutes(intervalValue))
.limit(divide.longValue()).collect(Collectors.toList());
for (LocalTime localTime : list) {
System.out.println(localTime);
}
return list;
}