【问题标题】:How to manipulate Ranges of Time of a Day如何操作一天中的时间范围
【发布时间】:2019-05-02 18:49:00
【问题描述】:

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

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

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

【问题讨论】:

标签: java intervals localtime


【解决方案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 的每个实例都可以通过 toTemporalAccessor() 方法转换回 LocalTime,但 Time4J 中存在但 java.time.LocalTime 中不存在的值 24:00 除外。

【讨论】:

  • 嘿兄弟,谢谢你的提示。你用这个库做了一个了不起的工作,非常强大并且设计得非常好。真是不可思议,你就是男人!我刚刚在几分钟内解决了我的问题...
  • @Andre 谢谢。您的帖子也让我想到了未来可能的增强功能,例如 ClockInterval 中的“全天”常量和一个额外的减号()方法,以方便简单的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多