我有一个开始时间:startTime:09-2017,结束时间是结束时间:05-2018 . 我想计算每个月的数据量,然后加起来计算从开始到结束的时间段内的数据 . 例如,开始时间是09-2017,结束时间是5-2018 . 在8个月内,我想计算每个月的数据,然后加起来计算所有时间段 . 我使用for循环结束时间减去一个月 . 如果endTime的月份等于monthOfStartTime,循环将停止 . 我将数据保存到arrayList,一个月后我将其添加回来 . 以下是我的代码:
startTime:09-2017;结束时间:05-2018;
@Autowired
private StudentDao studentDao;
//total students in 8 month
List<Student> students = new ArrayList<>();
//caculator data in everyMonth
for (int i = dateTimeNow.getMonthOfYear(); i >= 0; i--) {
//break if equal startTime.
LocalDateTime startTimeCaculator = endTime.getMonthOfYear().minusMonths(i-1);
List<Student> studentOnMonth =
studentDao.getDataEveryMonth(startTimeCaculator,endTime);
students.addAll(studentOnMonth);
}
我有两个问题 . 当我计算开始日期时,循环停止的条件是什么?其次,如果我使用i = endTime.getMonthOfYear变量,循环将从月末计数到零,并且不计算多年 . 完成5-2018的时间,循环将运行5次而不计算2017年 . 请帮助 .
2 回答
我会像这样控制循环:
由于代码片段在此处输出:
如果它不是您想要的,请调整 .
您可能还想修改学生DAO以接受
YearMonth
参数 . 这取决于您想要的灵活性:传递两个日期时间实例允许比一个月更短或更长的时间段,因此提供了更大的灵活性 .编辑:如果您想要包含
startMonth
,请使用“not before”表示或之后,例如:输出:
您可以像这样使用isAfter()函数: