【问题标题】:Getting a List of dates given a start and end date获取给定开始和结束日期的日期列表
【发布时间】:2016-06-07 13:49:22
【问题描述】:

给定两个日期(一个开始日期和一个结束日期,格式为 M,YYYY),我想创建一个数组列表,其中每个元素都是一个日期,格式为 M,YYYY,介于开始日期和结束日期之间。

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

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

我可以通过创建一个while循环(while startYear

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

【问题讨论】:

  • @assylias JAVA,对不起,我忘了包括那个。

标签: java loops date


【解决方案1】:

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

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());

【讨论】: