当前位置: 首页 > 面试题库 >

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

华聪
2023-03-14
问题内容

我正在寻找一个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();
    }
}

乔达时间真棒:-)



 类似资料:
  • 问题内容: 在java中如何计算两个日期的间隔? 问题答案: 简单差异(无lib) 然后你可以致电: 以分钟为单位获取两个日期的差异。 ,一个标准的Java枚举,范围从nanos到数天。 可读的差异(无lib) http://ideone.com/5dXeu6 输出类似于,带有单位排序。 你只需要将该映射转换为用户友好的字符串即可。 警告 上面的代码片段计算了两个瞬间之间的简单差异。它可以在夏令开

  • 问题内容: 我想以小时/分钟/秒为单位计算两个日期之间的差异。 我的代码在这里有一个小问题: 这应该产生: 但是我得到这个结果: 有人可以在这里看到我在做什么错吗? 问题答案: 尝试 注意:这假定diff是非负数。

  • 本文向大家介绍java计算两个日期中间的时间,包括了java计算两个日期中间的时间的使用技巧和注意事项,需要的朋友参考一下 java计算两个日期中间的时间 其中在数据库中有一个字段为datetime类型,想要计算两个日期之间过了多少天 多少小时 多少分钟。 思路为把时间换算为毫秒(与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。然后利用毫秒的加减计算。 计算如下:

  • 问题内容: 如何计算SQL Server中两个日期之间的工作日数? 星期一至星期五,它必须是T-SQL。 问题答案: 对于周一至周五的工作日,您可以使用单个SELECT进行操作,如下所示: 如果要包括假期,则必须进行一些调整…

  • 问题内容: 我正在尝试用Joda时间实现Date迭代器,但没有成功。 我需要一些可以让我整天从startDate到endDate进行迭代的东西, 您对此有任何想法吗? 问题答案: 这是一些可以帮助您入门的东西。您可能要考虑一下,是否希望它在结尾处是包容性的或排他性的,等等。 自从我用Java编写迭代器以来已经有一段时间了,所以我 希望 它是正确的。我认为这还可以… 哦,对于C#迭代器块,这就是我能

  • 当我计算日差时,我必须减去月差中包含的天数。那么我该如何计算一个月有28天、31天还是30天,以及有多少天。我必须乘以月差?我将如何生成计算特定月份内的确切天数的公式,例如2个月或4个月内的天数?