有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Joda Time实现一个日期范围迭代器

我试图用Joda time实现一个日期迭代器,但没有成功
我需要一些东西,可以让我重复从开始日期到结束日期的所有日期
你知道怎么做吗


共 (3) 个答案

  1. # 2 楼答案

    我知道你问过乔达的时间。今天,我们应该更喜欢使用java。时间,现代Java日期和时间API,基本上是Joda time的进一步开发。自Java 9以来,日期范围的迭代已通过Stream内置:

        LocalDate startDate = LocalDate.of(2019, Month.AUGUST, 28);
        LocalDate endate = LocalDate.of(2019, Month.SEPTEMBER, 3);
        startDate.datesUntil(endate).forEach(System.out::println);
    

    输出:

    2019-08-28
    2019-08-29
    2019-08-30
    2019-08-31
    2019-09-01
    2019-09-02
    

    如果希望结束日期包含在内,请使用datesUntil(endate.plusDays(1))

    如果你真的想要一个Iterator

        Iterator<LocalDate> ldi = startDate.datesUntil(endate).iterator();
    

    Joda Time主页上说:

    Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).

    Joda-Time - Home

  2. # 3 楼答案

    这里有一些东西可以让你开始。你可能会想,你到底是想让它具有包容性还是排他性,等等

    import org.joda.time.*;
    import java.util.*;
    
    class LocalDateRange implements Iterable<LocalDate>
    {
        private final LocalDate start;
        private final LocalDate end;
    
        public LocalDateRange(LocalDate start,
                              LocalDate end)
        {
            this.start = start;
            this.end = end;
        }
    
        public Iterator<LocalDate> iterator()
        {
            return new LocalDateRangeIterator(start, end);
        }
    
        private static class LocalDateRangeIterator implements Iterator<LocalDate>
        {
            private LocalDate current;
            private final LocalDate end;
    
            private LocalDateRangeIterator(LocalDate start,
                                           LocalDate end)
            {
                this.current = start;
                this.end = end;
            }
    
            public boolean hasNext()
            {
                return current != null;
            }
    
            public LocalDate next()
            {
                if (current == null)
                {
                    throw new NoSuchElementException();
                }
                LocalDate ret = current;
                current = current.plusDays(1);
                if (current.compareTo(end) > 0)
                {
                    current = null;
                }
                return ret;
            }
    
            public void remove()
            {
                throw new UnsupportedOperationException();
            }
        }
    }
    
    class Test
    {
        public static void main(String args[])
        {
            LocalDate start = new LocalDate(2009, 7, 20);
            LocalDate end = new LocalDate(2009, 8, 3);
            for (LocalDate date : new LocalDateRange(start, end))
            {
                System.out.println(date);
            }
        }
    }
    

    我已经有一段时间没有用Java编写迭代器了,所以我希望它是正确的。我想这很好

    哦,对于C#迭代器块,我只能说