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

How to manipulate Ranges of Time of a Day

我正在处理 Java 中的议程。我在我的数据库中存储了星期几、一些实验室可用性的开始和结束时间。

现在我需要通过仅显示一天中的不可用时间来为日程安排系统提供服务。例如,如果第一天有开始时间 13:00 和结束时间 19:00,我需要 return 一个范围,就像这样: [00:00 - 13:00、19:00 - 23:59]。请记住,一天可以有多个可用范围。

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

我的库 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 to a standard ClockInterval, too. There are also various methods to print such intervals in a localized way. Furthermore, you might find the class DayPartitionBuilder interesting which allows to connect weekdays and time schedules in streaming, see the example given in the documentation.

关于与 java.time 的兼容性:

  • ClockInterval 的 between() 方法也接受 java.time.LocalTime.
  • 的实例
  • 每个 PlainTime 的实例都可以通过方法 toTemporalAccessor() 转换回 LocalTime,但 Time4J 中存在但不存在的值 24:00 除外在 java.time.LocalTime.