6

「第 3 日曜日ごと」や「2 か月ごとの最初の月曜日」など、一連の日付規則を指定できる Java クラスを探しています。そこから無限イテレータのようなものを取得できるようにしたい (.next() は、ルール セットに一致する次の日付を返す)。

自分でも作れそうだけど、カレンダーって面倒くさいし、似たようなものが既にある気がする。私はくだらない車輪を再発明する人になるのが嫌いです.

誰かがこのようなことを知っていますか?私は JODA を見てきましたが、その基礎を築いているように見えますが、私が望む完全な機能を提供しているようには見えません..

4

4 に答える 4

7

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

Joda Time は最高です :-)

于 2009-05-11T10:49:52.230 に答える
0

ジョブスケジューリング用に設計されたQuartzを見ることができます。

于 2009-05-11T20:10:15.710 に答える