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

tech2024-08-20  39

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

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

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

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

 为了简洁我采用了小 V C 架构  ,解决了2020 0201也算休息日的问题 

思路 :

先确定目标时间  使用Calendar

然后渲染周日到周六的列表

填充数据根据 一号是星期几,同时记得周六换行

然后借助时间戳判断条件是否满足休息日

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星期六"); } }

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

CaesarChang张旭 认证博客专家 Spring Spring Boot Java 曾就职于苏宁,爱奇艺等公司,擅长java后端开发,拥有多年项目经验和教学经验;在多个大型企业级项目中担任过重要角色。教学风格严谨而又不失幽默,注重培养学员的自主学习和解决问题的能力,授课得到学员的高度认可。
最新回复(0)