前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >某公司软件开发工程师孙工,作息规律为上三天班,休息一天,经常不确定休 息日是否周末,为此,请你开发一个程序,当孙工输入年及月,以日历方式显示对 应月份的休息日,用中括号进行标记.同时,统计出本月有几天

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

作者头像
CaesarChang张旭
发布2021-01-26 11:41:19
6250
发布2021-01-26 11:41:19
举报
文章被收录于专栏:悟道

By 张旭CaesarChang 合作: root121toor@gmail.com

~关注我 带你看更多精品知识

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

此题 主要是考验 Calendar 和Date 类的使用 不会的可以看我的博客 后半部分-->Calendar 和 Date

为了简洁我采用了小 V C 架构 ,解决了2020 0201也算休息日的问题 思路 : 先确定目标时间 使用Calendar 然后渲染周日到周六的列表 填充数据根据 一号是星期几,同时记得周六换行 然后借助时间戳判断条件是否满足休息日

代码语言:javascript
复制
import javax.swing.text.View;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import java.util.SimpleTimeZone;
import java.util.concurrent.CancellationException;

/**
 * @author CaesarChang
 * @data 2020/9/3
 * @time 16:42
 **/
public class Controller {
    public static void main(String[] args) throws ParseException {
        //初始化
        Views views=new Views();
        //欢迎界面
        views.welcome();

        while(true){
            //设定目标时间
            int targetYear=views.getYearView();
            int targetMonth=views.getMonthView()-1;
            Calendar cl=Calendar.getInstance();
            cl.set(Calendar.YEAR,targetYear);
            cl.set(Calendar.MONTH,targetMonth);
            cl.set(Calendar.DAY_OF_MONTH,1);
            //确定本月最大天数
            int MaxDay=cl.getActualMaximum(Calendar.DAY_OF_MONTH);
            //判断第一天星期几
            int week=cl.get(Calendar.DAY_OF_WEEK);
            //调用周列表显示
            views.WeekListView();
            //第一天前空格
            for(int i=1;i<week;i++){
                System.out.printf("%-8s","");
            }
            //本月休息天数
            int relaxDay=0;
            //本月周末休息天数
            int relaxWeekDay=0;
            for(int i=1;i<=MaxDay;i++){
                //设置这是哪一天
                cl.set(Calendar.DAY_OF_MONTH,i);
                //获取目标的Date对象
                Date targetDate=cl.getTime();
                //调用判断是否休息函数
                if(judgeRelax(targetDate)){
                    System.out.printf("%-8s","["+cl.get(Calendar.DAY_OF_MONTH)+"]");
                    relaxDay++;
                    if(cl.get(Calendar.DAY_OF_WEEK)==6||cl.get(Calendar.DAY_OF_WEEK)==7){
                        relaxWeekDay++;
                    }
                }
                else{
                    System.out.printf("%-8d",i);
                    }

                if(cl.get(Calendar.DAY_OF_WEEK)==7){
                    System.out.println(" ");
                }
            }
            System.out.println(" ");
            System.out.println("本月休息天数有"+relaxDay+"天");
            System.out.println("本月轮到周末休息天数有"+relaxWeekDay+"天");


            //判断是否继续
            String choose=views.continueView();
            if(choose.equals("否")){
                views.bye();
                break;
            }
            System.out.println("");
        }


    }
    public  static boolean judgeRelax(Date date) throws ParseException {
        //格式化
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        //原始时间  从一号开始排除02 01号
        Date remoteDate=format.parse("2020-02-01");
        //记录0202的毫秒
        long remoteTime=remoteDate.getTime();
        //记录目标日期毫秒
        long dateTime=date.getTime();
        //时间差 (天数)
        int result=(int)((dateTime-remoteTime)/1000/3600/24);
        //时间间隔是否为3天

        if(result>=0&&result%4==1){
             return true;
        }
        return false;
    }


}
class Views{
    Scanner scanner=new Scanner(System.in);
    public int getYearView(){
        System.out.println("请输入年:");
        int year = scanner.nextInt();
        return year;
    }
    public int getMonthView(){
        System.out.println("请输入月份");
        int month= scanner.nextInt();
        return month;
    }
    public String continueView(){
        String temp = scanner.nextLine();
        System.out.println(" ");
        System.out.println("是否继续?  是/否");
        String choose = scanner.nextLine();
        return choose;
    }
    public  void welcome(){
        System.out.println("欢迎使用");
    }
    public void bye(){
        System.out.println("期待下次相遇");
    }
    public void WeekListView(){
        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
    }
}

关注我带你看更多技术文章和面试干货,给我点个赞吧 在我脑子里跑了这么久

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • By 张旭CaesarChang 合作: root121toor@gmail.com
  • ~关注我 带你看更多精品知识
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档