如何使用Joda-Time表达部分间隔?

Tho*_*sen 9 java jodatime

我有一些关于我试图用Joda-Time代表的开放时间的数据.

典型的开放时间如下:

开放时间为9至12,13至20.

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

  • 检查开放时间是否有效(9是在12之前等)
  • 检查没有开放区间重叠("9-12和11-13"是非法的)

在API方面,Joda-Time Interval类具有进行此验证所需的方法,但Intervals是日期 - 时间 - 连续体中的一对时刻.我想代表他们独立于绝对时间,有点像两个LocalTime部分的间隔.这可能吗?

Tho*_*sen 6

这是对自定义TimeInterval的尝试(非常类似于Gray评论的解决方案):

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));
    }
}

  • 是的,你需要自己编写这种间隔类.顺便说一句,你的toInterval()方法被破坏了,因为它获得了当前的瞬间两次(每次在toDateTimeToday中一次).如果确切地称为午夜的每一边(比赛条件),它可以返回两个不同的日期. (3认同)