Как манипулировать диапазонами времени суток - PullRequest
1 голос
/ 02 мая 2019

Я работаю с повесткой дня на Java. Я сохранил в своей базе данных день недели, время начала и окончания доступности некоторых лабораторий.

Теперь мне нужно предоставить сервис для системы расписаний, показывая только недоступное время суток. Например, если у первого дня есть время начала 13:00 и время окончания 19:00, мне нужно вернуть диапазон так: [00:00 - 13:00, 19:00 - 23:59]. Помните, что в один день может быть доступно больше, чем диапазон.

Есть ли какой-нибудь Java-класс или API, которые могли бы помочь мне вычесть эти диапазоны?

1 Ответ

1 голос
/ 06 мая 2019

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.
...