You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java计算每月同周几日期时缺失31日问题排查

问题分析与解决

你的代码缺失2023-01-31的原因是循环终止条件错误:
你用了date.isBefore(endLocalDate)作为循环判断条件,而endLocalDate是当月最后一天(2023-01-31)。当date走到31号时,date.isBefore(endLocalDate)返回false,循环直接终止,导致31号没被检查是否符合周几的条件。

修改方案1:修正循环条件

把循环的终止条件改成!date.isAfter(endLocalDate)(或者date.compareTo(endLocalDate) <= 0),这样就能包含当月最后一天:

import java.time.LocalDate;
import java.util.List;
import java.util.ArrayList;
        
class HelloWorld {
    public static void main(String[] args) {
        LocalDate startLocalDate = LocalDate.parse("2023-01-03");
        LocalDate endLocalDate = startLocalDate.withDayOfMonth(startLocalDate.getMonth().length(startLocalDate.isLeapYear()));
        int startDayOfWeek = startLocalDate.getDayOfWeek().getValue();
        List<LocalDate> listOfDays = new ArrayList<>();
        // 修正循环条件,包含endLocalDate
        for (LocalDate date = startLocalDate; !date.isAfter(endLocalDate); date = date.plusDays(1)) {
            if (date.getDayOfWeek().getValue() == startDayOfWeek) {
                listOfDays.add(date);
            }
        }
        System.out.println(listOfDays);
    }
}

修改方案2:更高效的实现(无需每日遍历)

没必要每天逐个检查,直接从起始日期开始每次加7天,直到超过当月最后一天,这样代码更简洁高效:

import java.time.LocalDate;
import java.util.List;
import java.util.ArrayList;
        
class HelloWorld {
    public static void main(String[] args) {
        LocalDate startLocalDate = LocalDate.parse("2023-01-03");
        LocalDate endLocalDate = startLocalDate.withDayOfMonth(startLocalDate.getMonth().length(startLocalDate.isLeapYear()));
        List<LocalDate> listOfDays = new ArrayList<>();
        
        LocalDate currentDate = startLocalDate;
        while (!currentDate.isAfter(endLocalDate)) {
            listOfDays.add(currentDate);
            currentDate = currentDate.plusWeeks(1); // 直接加一周
        }
        
        System.out.println(listOfDays);
    }
}

运行上述任一修改后的代码,都会输出你期望的结果:

[2023-01-03, 2023-01-10, 2023-01-17, 2023-01-24, 2023-01-31]

内容的提问来源于stack exchange,提问作者Alvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:00:23