My lib 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)}.Каждый интервал результата может быть преобразован в стандартное ClockInterval
тоже.Существуют также различные способы печати таких интервалов локализованным способом.Кроме того, вам может показаться интересным класс DayPartitionBuilder
, который позволяет связывать рабочие дни и расписания при потоковой передаче, см. Пример, приведенный в документации .
О совместимости с java.time
:
- Методыween ()
ClockInterval
также принимают экземпляры java.time.LocalTime
. - Каждый экземпляр
PlainTime
может быть преобразован обратно в LocalTime
с помощьюметод toTemporalAccessor()
, за исключением значения 24:00, которое существует в Time4J, но не в java.time.LocalTime
.