如何使用JDateChooser与JCheckBox筛选指定区间内的对应星期日期
功能实现方案
核心逻辑
通过3个核心步骤完成筛选:
- 读取两个
JDateChooser的起止日期、7个JCheckBox的勾选状态作为输入 - 遍历起止日期区间内的所有日期
- 匹配每个日期对应的星期是否为已勾选的选项,匹配成功则加入结果集
具体实现代码(Java 8+,推荐使用java.time时间API避免旧API的时区、线程安全问题)
1. 读取勾选的星期筛选条件
import java.time.DayOfWeek; import java.util.HashSet; import java.util.Set; // 这里的cbMonday到cbSunday对应你页面上的7个JCheckBox控件 Set<DayOfWeek> allowedWeekDays = new HashSet<>(); if (cbMonday.isSelected()) allowedWeekDays.add(DayOfWeek.MONDAY); if (cbTuesday.isSelected()) allowedWeekDays.add(DayOfWeek.TUESDAY); if (cbWednesday.isSelected()) allowedWeekDays.add(DayOfWeek.WEDNESDAY); if (cbThursday.isSelected()) allowedWeekDays.add(DayOfWeek.THURSDAY); if (cbFriday.isSelected()) allowedWeekDays.add(DayOfWeek.FRIDAY); if (cbSaturday.isSelected()) allowedWeekDays.add(DayOfWeek.SATURDAY); if (cbSunday.isSelected()) allowedWeekDays.add(DayOfWeek.SUNDAY);
2. 读取起止日期并转换格式
import java.time.LocalDate; import com.toedter.calendar.JDateChooser; // 非空判断,避免空指针 if (chooserStart.getDate() == null || chooserEnd.getDate() == null) { // 自行补充提示用户选择起止日期的逻辑 return; } // JDateChooser返回的是java.util.Date,转换为java.time.LocalDate LocalDate startDate = new java.sql.Date(chooserStart.getDate().getTime()).toLocalDate(); LocalDate endDate = new java.sql.Date(chooserEnd.getDate().getTime()).toLocalDate(); // 校验日期区间合法性 if (endDate.isBefore(startDate)) { // 自行补充提示结束日期不能早于开始日期的逻辑 return; } // 校验是否勾选了至少一个星期选项 if (allowedWeekDays.isEmpty()) { // 自行补充提示至少选择一个星期的逻辑 return; }
3. 遍历日期区间筛选匹配结果
import java.util.ArrayList; import java.util.List; List<LocalDate> matchedDates = new ArrayList<>(); LocalDate currentDate = startDate; // 遍历区间内所有日期 while (!currentDate.isAfter(endDate)) { // 匹配星期是否在选中集合内 if (allowedWeekDays.contains(currentDate.getDayOfWeek())) { matchedDates.add(currentDate); } currentDate = currentDate.plusDays(1); }
4. 结果使用说明
遍历matchedDates即可得到所有符合要求的日期,按你需要的格式输出即可。你给出的示例场景运行后得到的匹配结果为:
- 2021-10-04(周一)
- 2021-10-05(周二)
内容的提问来源于stack exchange,提问作者Thevinu
相关产品推荐
相关产品推荐

