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

标签 java date iterator rules

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

我想我可以自己构建它 - 但日历很麻烦,而且感觉类似的东西应该已经存在了。我讨厌自己重新发明一个更糟糕的轮子。

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

最佳答案

我认为没有现成的 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 时间很棒 :-)

关于Java 日期迭代器工厂,具有指定如何计算间隔的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/847520/

相关文章:

java - 有没有办法在 IntelliJ IDEA 中编译所有的 JSP 文件?

sql - 按星期几订购日期

for-loop - 尼姆 : How to iterate over a slice?

java - 如何在Java中将日期转换为dd.MM.yyyy格式?

linux - 在 bash 中向字符串日期添加秒

c++ - 如何打印 C++ 中的迭代器?

C++ 将 vector 迭代器转换为索引

java - Windows 上的 IBM Websphere - OutOfMemoryError : Failed to create a thread

javacl - 将 int2* (或任何通用的 vector 缓冲区)传递给内核

java - 无法同步 Gradle 项目 'Sunshine-Version-2'