小编典典

Java日期迭代器工厂,其中的规则指定了如何计算间隔

java

我正在寻找一个Java类,可以在其中指定一组日期规则,例如“每个第3个星期日”和“每个第二个月的第一个星期一”。我希望能够得到像无限迭代器这样的东西(.next()将返回与规则集匹配的下一个日期)。

我想我可以自己构建它-但是日历很麻烦,而且感觉应该已经存在类似的东西。我讨厌成为重新发明更笨拙的轮子的人。

有人知道这样的事吗?我一直在研究JODA,它似乎为其奠定了基础,但似乎没有提供我想要的全部功能。


阅读 221

收藏
2020-11-13

共1个答案

小编典典

我不认为有任何现成的用于joda-time或Java Calendar
API的迭代器,但是使用joda是如此简单,您应该使用它。例如,在暂停几个月后重新熟悉了joda之后,我在大约10分钟的时间内完成了此操作:

public class InstantIterator implements Iterator<Instant>,
                                        Iterable<Instant> {

    private Instant current;
    private final Instant original;
    private Duration skip;
    private List<Instant> skipThese;

    public InstantIterator(Instant startFrom, Duration skip) {
        this.current = original = startFrom;
        this.skip = skip;
        skipThese = new Vector<Instant>();
    }

    public boolean hasNext() {
        return true;
    }

    public Instant next() {
        Instant currentNext = current.toInstant();
        current = current.plus(skip);
        while (skipThese.contains(currentNext)) {
            currentNext = current.toInstant();
            current = current.plus(skip);
        }
        return currentNext;
    }

    public void remove() {
        skipThese.add(current.toInstant());
    }

    public Iterator<Instant> iterator() {
        return this;
    }

    public void rewind() {
        current = original.toInstant();
    }

    public void resetRemoved() {
        skipThese.clear();
    }

    public void resetIterator() {
        rewind();
        resetRemoved();
    }
}

乔达时间真棒:-)

2020-11-13