java正确开发系列:使用hutool计算出时间段范围内的每一天

背景:

前端入参分别有startDate和endDate,类型为字符串,格式为:2023-01-01、2023-05-01,需要后端计算出1月到5月的每一天

 

代码如下:

String startDateStr = "2023-05-01";
String endDateStr = "2023-05-05";

DateTime startDate = DateUtil.parse(startDateStr);
DateTime endDate = DateUtil.parse(endDateStr);

// LocalDateTime endDateNew = endDate.toLocalDateTime().plusDays(endDate.getLastDayOfMonth() - 1);

LocalDateTime start = LocalDateTimeUtil.parse(startDate.toLocalDateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")));
LocalDateTime end = LocalDateTimeUtil.parse(endDate.toLocalDateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")));

// Duration between = LocalDateTimeUtil.between(start, endDateNew);
Duration between = LocalDateTimeUtil.between(start, end);
long days = between.toDays();
log.info("相差天数 = " + days);

int startMonth = startDate.month() + 1;
int endMonth = endDate.month() + 1;

List<String> daysList = new ArrayList<>();

while (!start.isAfter(end)) {
for (int i = startMonth; i <= endMonth; i++) {
// int monthDays = startDate.getLastDayOfMonth();
int monthDays = DateUtil.parse(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).getLastDayOfMonth();
for (int j = 0; j < monthDays; j++) {
log.info("month = " + i + ", monthDays = " + monthDays + ", start = " + start + ", days = " + days);
daysList.add(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
start = start.plusDays(1);
days--;
if (days < 0) {
break;
}
}
}
}

 

posted @ 2023-05-19 10:20  jamstack  阅读(962)  评论(0编辑  收藏  举报