Java Joda Time实现一个日期范围迭代器 4 月,1 周 Questions & Answers 11958 我试图用Joda time实现一个日期迭代器,但没有成功 我需要一些东西,可以让我重复从开始日期到结束日期的所有日期 你知道怎么做吗
# 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)
# 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#迭代器块,我只能说
# 1 楼答案
http://code.google.com/p/google-rfc-2445
# 2 楼答案
我知道你问过乔达的时间。今天,我们应该更喜欢使用java。时间,现代Java日期和时间API,基本上是Joda time的进一步开发。自Java 9以来,日期范围的迭代已通过
Stream
内置:输出:
如果希望结束日期包含在内,请使用
datesUntil(endate.plusDays(1))
如果你真的想要一个
Iterator
:Joda Time主页上说:
(Joda-Time - Home)
# 3 楼答案
这里有一些东西可以让你开始。你可能会想,你到底是想让它具有包容性还是排他性,等等
我已经有一段时间没有用Java编写迭代器了,所以我希望它是正确的。我想这很好
哦,对于C#迭代器块,我只能说