获取开始日期和结束日期的日期列表

时间:2016-06-07 13:49:22

标签: java loops date

给定两个日期(M,YYYY形式的开始日期和结束日期),我想制作一个arraylist,每个元素的日期形式为起始日期和结束日期之间的M,YYYY,包括。 / p>

例如,给定日期10,2010和2,2011,我的列表应如下所示:

list = {(10,2010),(11,2010),(12,2010),(1,2011),(2,2011)};

我可以通过创建一个while循环(同时startYear< endYear),开始月份的帐户,循环到第12个月,将日期插入列表等来完成此操作。

但是我觉得必须有更有效的方法来解决这个问题,因为这需要对起始月份和结束年份进行多次检查。有没有更好的解决方案,我没有看到?

1 个答案:

答案 0 :(得分:5)

将日期存储为对象而不是年,月的“对”会更有意义。例如,使用YearMonth API(Java 8及更高版本)中的java.time类:

YearMonth from = YearMonth.of(2010, 10);
YearMonth to = YearMonth.of(2011, 2);
List<YearMonth> list = new ArrayList<> ();

for (YearMonth ym = from; !ym.isAfter(to); ym = ym.plusMonths(1)) {
  list.add(ym);
}

或者使用stream API(在这种情况下不确定它更干净):

List<YearMonth> list = Stream.iterate(from, ym -> ym.plusMonths(1))
                             .limit(MONTHS.between(from, to) + 1)
                             .collect(toList());