找休息日(上三天休一天)

本文档展示了如何使用Java编程实现一个功能,根据用户输入的年份和月份,计算指定时间段内的工作日和休息日,包括每月的最大天数,以及特定月份的休息日列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Test {
    public static void main(String[] args) throws ParseException {
        System.out.println("请输入年份和月份:(年份-月份)");
        Scanner sc = new Scanner(System.in);
        String dateStr = sc.next() + "-01";
        LocalDate nowdate = LocalDate.parse(dateStr);
        // nowdate = 2020-05-01
        System.out.println(nowdate);

        // 查询nowdate该月一共多少天
        int max = nowdate.lengthOfMonth();
        System.out.println("当前月份最大天数为:" + max);

        // 第一次休息的日期 2020-02-01
        LocalDate start = LocalDate.of(2020,2,1);
        // 输入月最后一天 2020-05-31
        LocalDate end = nowdate.plusDays(max).minusDays(1);
        // 输入月份月末-首次休息的间隔天数

        // 1 2 3 4 5 6 7 8 9   i
        // 1       1       1   i%4==1 休息
        int i = 1;
        LocalDate tempDate = start;
        ArrayList<Day> days = new ArrayList<>();
        while (tempDate.isBefore(end)) {
            Day day = new Day();
            day.setLd(tempDate);
            day.setRest(i%4==1 ? true : false);
            day.setWeekDay(tempDate.getDayOfWeek().getValue());
            days.add(day);
            i++;
            tempDate = tempDate.plusDays(1);
        }

        System.out.println("间隔天数:" + (days.size() - 1));
        System.out.println(days);

        // 全部休息日
        System.out.println("全部休息日如下:");
        ArrayList<Day> allRest = new ArrayList<>();
        for (int i1 = 0; i1 < days.size(); i1++) {
            Day day = days.get(i1);
            if(day.isRest()){
                allRest.add(day);
            }
        }
        System.out.println(allRest);

        // 本月休息日
        ArrayList<Day> thisMonthRest = new ArrayList<>();
        System.out.println("本月休息日:");
        for (int i1 = 0; i1 < allRest.size(); i1++) {
            Day day = allRest.get(i1);
            if(!(day.getLd().isBefore(nowdate))){
                thisMonthRest.add(day);
            }
        }
        System.out.println(thisMonthRest);
    }
}
public class Day {
    private LocalDate ld;  //当前日期
    private boolean isRest;  //是否休息
    private int weekDay;  //星期几

    public Day(LocalDate ld, boolean isRest, int weekDay) {
        this.ld = ld;
        this.isRest = isRest;
        this.weekDay = weekDay;
    }

    public Day() {
    }

    public LocalDate getLd() {
        return ld;
    }

    public void setLd(LocalDate ld) {
        this.ld = ld;
    }

    public boolean isRest() {
        return isRest;
    }

    public void setRest(boolean rest) {
        isRest = rest;
    }

    public int getWeekDay() {
//        String[] week = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
//        weekDay = week[ld.getDayOfWeek().getValue() - 1];
        return weekDay;
    }

    public void setWeekDay(int weekDay) {
        this.weekDay = weekDay;
    }

    @Override
    public String toString() {
        return  ld + "-星期" + weekDay +
                "-" + (isRest ? "休息" : "上班");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值