如何获取两个日期之间的日期列表?

Ava*_*van 3 java android jodatime

在我的应用程序中,用户应该从listview. 问题是生成这个列表。例如,我需要2010-20136-8之间的所有日期(期间可能是)。是否有任何方法可以获取该数据?

示例:我需要01.01.2013 - 10.01.2013之间的日期

  1. 01.01.2013
  2. 02.01.2013
  3. 03.01.2013
  4. 04.01.2013
  5. 05.01.2013
  6. 06.01.2013
  7. 07.01.2013
  8. 08.01.2013
  9. 09.01.2013
  10. 10.01.2013

提前致谢

Jon*_*eet 5

对于列表,您可以这样做:

public static List<LocalDate> datesBetween(LocalDate start, LocalDate end) {
    List<LocalDate> ret = new ArrayList<LocalDate>();
    for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) {
        ret.add(date);
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将包括end. 如果您希望它排除结尾,只需将循环中的条件更改为date.isBefore(end).

如果您只需要一个,Iterable<LocalDate>您可以编写自己的类来非常有效地执行此操作,而不是建立一个列表。如果您不介意一定程度的嵌套,您可以使用匿名类来执行此操作。例如(未经测试):

public static Iterable<LocalDate> datesBetween(final LocalDate start,
                                               final LocalDate end) {
    return new Iterable<LocalDate>() {
        @Override public Iterator<LocalDate> iterator() {
            return new Iterator<LocalDate>() {
                private LocalDate next = start;

                @Override
                public boolean hasNext() {
                    return !next.isAfter(end);
                }

                @Override
                public LocalDate next() {
                    if (next.isAfter(end)) {
                        throw NoSuchElementException();
                    }
                    LocalDate ret = next;
                    next = next.plusDays(1);
                    return ret;
                }

                @Override
                public void remove() {
                    throw new UnsupportedOperationException();
                }
            };
        }
    };
}
Run Code Online (Sandbox Code Playgroud)