我正在寻找一个 Java 类,我可以在其中指定一组日期规则,例如“每个第三个星期日”和“每个第二个月第一次出现星期一”。我希望能够从中获得类似无限迭代器的东西(.next() 将返回与规则集匹配的下一个日期)。
我想我可以自己构建它——但是日历很麻烦,而且感觉应该已经存在类似的东西了。我讨厌成为一个重新发明一个更糟糕的轮子的人。
有人知道这样的事情吗?我一直在看 JODA,它似乎为它奠定了基础,但似乎没有提供我想要的全部功能。
我认为没有任何现成的用于 joda-time 或 Java 日历 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();
}
}
乔达时间很棒:-)
我的公司有一些非常像你想要的东西,但它是针对 .NET 的,所以它可能对你没有任何好处。
你可以看看专为作业调度而设计的Quartz 。