首页 > 解决方案 > 试图找到一种方法来计算与 java8 重叠的 Jodatime 时刻

问题描述

我目前正在考虑从 JodaTime 迁移到 java8 api。

大多数都可以,但有一件事让我无法理解。我需要计算一个人在“办公时间”内轮班工作的时间。

使用 JodaTime,我利用 Instant 类来执行计算并取得了巨大的成功:

DateTime in = new DateTime(inTime);
DateTime out = new DateTime(outTime);

Interval officeHours = new Interval(in.withTime(whstart.getHours(), 
whstart.getMinutes(), 0, 0),
in.withTime(whend.getHours(), whend.getMinutes(), 0, 0));

Interval shift = new Interval(in, out);
Interval overlap = officeHours.overlap(shift);

officeHoursSeconds = overlap != null ?
 overlap.toDuration().getStandardSeconds() : 0;

但是,由于 java8 中似乎缺少 Interval 类,所以我对如何最好地将这个逻辑移动到 java8 api 有点茫然。

我当然可以继续使用 Jodatime,但由于它已停产,我想尝试完全删除它。

非常感谢指针。

标签: datetimejava-8jodatime

解决方案


Joda-classInterval还没有被 Java-8 取代。我主要看到三种方式:

a)编写您自己的间隔类(但是查看源代码会有所帮助)

b) 使用我的 lib Time4J和类MomentInterval与方法findIntersection(...)产生一个可选的交集间隔。存在到 Java-8 类的转换方法,如moment.toTemporalAccessor()yielding java.time.Instant

c) 使用具有相同名称Interval的类的 lib Threeten-Extra及其方法intersection(...)。在这里,您必须首先检查交叉点是否存在,否则将引发异常。


推荐阅读