Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Joda时间表示部分间隔?_Java_Jodatime - Fatal编程技术网

Java 如何使用Joda时间表示部分间隔?

Java 如何使用Joda时间表示部分间隔?,java,jodatime,Java,Jodatime,我有一些关于开放时间的数据,我想用Joda Time来表示 一天中典型的开放时间如下所示: 从9点开到12点,从13点开到20点。 我在Joda时间实体中表示它们的主要原因是验证它们: 检查开放时间是否有效(9点在12点之前,等等) 检查开放间隔是否重叠(“9-12和11-13”是非法的) 就API而言,Joda Time类具有执行此验证所需的方法,但时间间隔是日期-时间连续体中的一对实例。我想独立于绝对时间来表示它们,有点像两个LocalTime部分的间隔。这是可能的吗?这里有一个自定义时

我有一些关于开放时间的数据,我想用Joda Time来表示

一天中典型的开放时间如下所示:

从9点开到12点,从13点开到20点。

我在Joda时间实体中表示它们的主要原因是验证它们:

  • 检查开放时间是否有效(9点在12点之前,等等)
  • 检查开放间隔是否重叠(“9-12和11-13”是非法的)

就API而言,Joda Time类具有执行此验证所需的方法,但时间间隔是日期-时间连续体中的一对实例。我想独立于绝对时间来表示它们,有点像两个LocalTime部分的间隔。这是可能的吗?

这里有一个自定义时间间隔的尝试(与Gray评论的解决方案非常相似):

导入org.joda.time.*; 公共类时间间隔{ 私有静态最终瞬间常数=新瞬间(0); 私人最终本地时间从; 私人最终本地时间; 公共时间间隔(LocalTime-from、LocalTime-to){ this.from=from; 这个; } 公共布尔值isValid(){ 请尝试{return toInterval()!=null;} catch(IllegalArgumentException e){return false;} } 公共布尔重叠(TimeInterval TimeInterval){ 返回此.toInterval().overlaps(timeInterval.toInterval()); } /** *@return这表示为一个适当的间隔 *@to在from之前无效时抛出IllegalArgumentException */ private Interval()引发IllegalArgumentException{ 返回新的间隔(从.toDateTime(常量)到.toDateTime(常量)); } }
我想你已经提供了最好的答案,伙计。我将它实现为一个OpenTimeRange,有一个开始和结束
LocalTime
,然后有一个数组来指定一天的开放时间。是的,您需要自己编写这种间隔类。顺便说一句,您的toInterval()方法被破坏了,因为它获取当前瞬间两次(每次一次toDateTimeToday)。如果正好在午夜的每一边调用,它可能返回两个不同的日期(比赛条件)。感谢您的评论,Stephen。我更新了代码,使其总是在一个固定的日期上计算时间间隔。 import org.joda.time.*; public class TimeInterval { private static final Instant CONSTANT = new Instant(0); private final LocalTime from; private final LocalTime to; public TimeInterval(LocalTime from, LocalTime to) { this.from = from; this.to = to; } public boolean isValid() { try { return toInterval() != null; } catch (IllegalArgumentException e) { return false;} } public boolean overlapsWith(TimeInterval timeInterval) { return this.toInterval().overlaps(timeInterval.toInterval()); } /** * @return this represented as a proper Interval * @throws IllegalArgumentException if invalid (to is before from) */ private Interval toInterval() throws IllegalArgumentException { return new Interval(from.toDateTime(CONSTANT), to.toDateTime(CONSTANT)); } }