给定两个日期(开始日期和结束日期,格式为 M,YYYY),我想创建一个数组列表,其中每个元素的日期格式为 M,YYYY,介于开始日期和结束日期之间,包括在内。
例如,给定日期 10,2010 和 2,2011,我的列表应该如下所示:
list = {(10,2010),(11,2010),(12,2010),(1,2011),(2,2011)};
我可以通过创建一个 while 循环(while startYear < endYear)、计算起始月份、for 循环到第 12 个月、将日期插入列表等来实现。
但我觉得必须有一种更有效的方法来解决这个问题,因为这需要对开始月份和结束年份进行多次检查。是否有我没有看到的更好的解决方案?
最佳答案
将日期存储为对象而不是年、月“成对”存储更有意义。例如,使用 YearMonth
java.time 中的类API(Java 8 及更高版本):
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());
关于java - 获取给定开始和结束日期的日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37681297/