如何操纵一天中的时间范围

时间:2019-05-02 18:49:00

标签: java intervals localtime

我正在处理Java中的议程。我已将每周的某天,某些实验室可用性的开始和结束时间存储在数据库中。

现在,我需要通过仅显示一天中的不可用时间来为计划系统提供服务。例如,如果第一天的开始时间为13:00,结束时间为19:00,则需要返回如下范围: [00:00-13:00,19:00-23:59]。请记住,一天可能超出可用范围。

是否有任何Java类或API可以帮助我减少这些范围?

1 个答案:

答案 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的实例。
  • 可以借助方法PlainTimeLocalTime的每个实例转换回toTemporalAccessor(),但Time4J中存在值24:00除外,而{{1 }}。