我正在处理Java中的议程。我已将每周的某天,某些实验室可用性的开始和结束时间存储在数据库中。
现在,我需要通过仅显示一天中的不可用时间来为计划系统提供服务。例如,如果第一天的开始时间为13:00,结束时间为19:00,则需要返回如下范围: [00:00-13:00,19:00-23:59]。请记住,一天可能超出可用范围。
是否有任何Java类或API可以帮助我减少这些范围?
答案 0 :(得分:1)
我的库Time4J为减法问题提供了以下解决方案:
ClockInterval fullDay = ClockInterval.between(PlainTime.of(0), PlainTime.of(24));
ClockInterval slot = ClockInterval.between(PlainTime.of(13, 0), PlainTime.of(19, 0));
IntervalCollection<PlainTime> icoll = IntervalCollection.onClockAxis().plus(fullDay);
List<ChronoInterval<PlainTime>> result = icoll.minus(slot).getIntervals();
可以很容易地迭代得到的半开间隔(带有开放末端)的列表,并给出预期的结果{[T00:00 / T13:00),[T19:00 / T24:00)}。每个结果间隔也可以converted到标准ClockInterval
。还有多种方法可以以局部方式打印此类间隔。此外,您可能会发现类DayPartitionBuilder
很有趣,它可以连接流中的工作日和时间表,请参见documentation中给出的示例。
关于与java.time
的兼容性:
ClockInterval
的between()方法也接受java.time.LocalTime
的实例。PlainTime
将LocalTime
的每个实例转换回toTemporalAccessor()
,但Time4J中存在值24:00除外,而{{1 }}。