休息日问题

休息日问题

某公司软件开发工程师孙工,作息规律为上三天班,休息一天,经常不确定休 息日是否周末,为此,请你开发一个程序,当孙工输入年及月,以日历方式显示对 应月份的休息日,用中括号进行标记.同时,统计出本月有几天休息,轮到周末休 息有几天.(注:首次休息日是 2020 年 2 月 2 日)

在这里插入图片描述

package nineFive;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class Demo2 {
    public static void main(String[] args) throws ParseException {
        System.out.println("请输入要查找的年");
        Scanner scanner=new Scanner(System.in);
        int year=2020;
        int month=2;
        try {
            year=scanner.nextInt();
            System.out.println("请输入要查找的月");
            month=scanner.nextInt();
        }catch (Exception e){
            System.out.println("输入错误");
            System.exit(0);
        }
        if (year<1970||year>2100||month<1||month>12){
            System.out.println("输入错误");
            System.exit(0);
        }
        //创建一个当前日历
        Calendar calendar=new GregorianCalendar();
        //给日历赋值
        System.out.println("日\t\t一\t\t二\t\t三\t\t四\t\t五\t\t六");
        calendar.set(Calendar.YEAR,year);
        calendar.set(Calendar.MONTH,month-1);
        //先将时间调整为该月1号
        calendar.set(Calendar.DATE,1);
        //获得该天是星期几
        //星期日为1,星期一为2,以此类推
        int weekDay=calendar.get(Calendar.DAY_OF_WEEK);
        //创建一个集合用来存储该日历
        List<String> list=new ArrayList<>();
        //把日历前一行的空缺补上
        for (int i=0;i<weekDay;i++){
            list.add("\t");
        }
        //统计该月休息时间和周末休息时间
        int rest=0;
        int weekRest=0;
        //获取当月最大天数
        int max=calendar.getActualMaximum(Calendar.DATE);
        for (int i=1;i<max+1;i++){
            calendar.set(Calendar.DATE,i);
            //把日期拼接成字符串
            int a=calendar.get(Calendar.YEAR);
            int b=calendar.get(Calendar.MONTH+1);
            int c=calendar.get(Calendar.DATE);
            String s=""+a+b+c;
            if (b<10){
                if (c<10){
                    s=""+a+0+b+0+c;
                }else {
                    s=""+a+0+b+c;
                }
            }else{
                if (c<0){
                    s=""+a+b+0+c;
                }
            }
            //创建一个时间格式
            SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMMdd");
            Date date=simpleDateFormat.parse(s);
            String s1=simpleDateFormat.format(date);
            //获取日期
            int day=calendar.get(Calendar.DATE);
            String day1=""+day;
            //判断是否是休息日
            if (day(s1)) {
                String s2 = "[" + day1 + "]";
                if (day<10){
                    s2=s2+"\t";
                }
                day1 = s2;
                rest++;
                if (calendar.get(Calendar.DAY_OF_WEEK) == 1 || calendar.get(Calendar.DAY_OF_WEEK) == 7) {
                    weekRest++;
                }
            }else {
                day1=day1+"\t";
            }
            list.add(day1);
        }
        //打印
        for (int i=0;i<list.size();i++){
            System.out.print(list.get(i)+"\t");
            if (i%7==0){
                System.out.print("\n");
            }
        }
        System.out.println("");
        System.out.println("本月休息"+rest+"天");
        System.out.println("本月周末休息"+weekRest+"天");
    }
    //创建方法找到休息的时间
    private static boolean day(String s) throws ParseException {
        //创建第一个休息日
        Calendar calendar=new GregorianCalendar();
        calendar.set(Calendar.YEAR,2020);
        calendar.set(Calendar.MONTH,1);//0-11
        calendar.set(Calendar.DATE,2);
        //创建一个链表用于存放休息日
        List<String> list=new ArrayList<>();
        for (int i=0;i<999;i++){
            //把时间拼接成字符串
            int a=calendar.get(Calendar.YEAR);
            int b=calendar.get(Calendar.MONTH+1);
            int c=calendar.get(Calendar.DATE);
            String s1=""+a+b+c;
            if (b<10){
                if (c<10){
                    s1=""+a+0+b+0+c;
                }else {
                    s1=""+a+0+b+c;
                }
            }else{
                if (c<0){
                    s1=""+a+b+0+c;
                }
            }
            //创建规范
            SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMMdd");
            //转换成时间
            Date date=simpleDateFormat.parse(s1);
            //再转换成字符串
            String s2=simpleDateFormat.format(date);
            //添加进链表
            list.add(s2);
            //每隔3天就是休息日
            calendar.add(Calendar.DATE,4);
        }
        //判断输入的时间是不是再链表中
        return list.contains(s);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值