Java中使用java.time.LocalDate按日期范围生成日期序列

需求: 配置起止日期, 计算两个日期间所有的天数, 或者当前日期到配置日期间的所有天数, 无需关心月份天数差异或者闰年的2月份
日期区间为左闭右开, 需要闭区间自行处理

场景: 按日期执行某些业务, 数据库记录上次执行日期, 计算出配置日期到今天的所有日期, 遍历执行, 最后更新上次执行日期; 由于日期区间左闭右开, 今天到今天的日期个数为0, 所以支持重复调用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

class Scratch {
    private static final Logger log = LoggerFactory.getLogger(Scratch.class);

    public static void main(String[] args) {

        LocalDate start = LocalDate.now().minusDays(2);
        log.info("起始日期(包含), start = {}", start);
        LocalDate end = LocalDate.now().plusDays(2);
        log.info("终止日期(不包含), end = {}", end);
        long p = start.until(end, ChronoUnit.DAYS);
        log.info("p = {}", p);
        for (int i = 0; i < p; i++) {
            LocalDate d = start.plusDays(i);
            log.info("d = {}", d);
        }
    }


}

输出
18:19:43.354 [main] INFO Scratch - 起始日期(包含), start = 2024-12-18
18:19:43.356 [main] INFO Scratch - 终止日期(不包含), end = 2024-12-22
18:19:43.359 [main] INFO Scratch - p = 4
18:19:43.359 [main] INFO Scratch - d = 2024-12-18
18:19:43.359 [main] INFO Scratch - d = 2024-12-19
18:19:43.359 [main] INFO Scratch - d = 2024-12-20
18:19:43.359 [main] INFO Scratch - d = 2024-12-21

posted @ 2024-12-20 18:29  落叶错为蝶  阅读(97)  评论(0)    收藏  举报