题目描述:某公司软件开发工程师孙工,作息规律为上三天班,休息一天,经常不确定休息日是否周末,为此,
请你开发一个程序,当孙工输入年及月,以日历方式显示对 应月份的休息日,用中括号进行标记.同时,
统计出本月有几天休息,轮到周末休息有几天.(注:首次休息日是 2020 年 2 月 2 日)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws ParseException {
Scanner input = new Scanner(System.in);
System.out.println("请输入年");
int year = input.nextInt();
System.out.println("请输入月");
int month = input.nextInt();
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
int days = calendar.getActualMaximum(Calendar.DATE);
int dayAll=0;
int dayWeek=0;
String[] week = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
for (int i = 0; i < week.length; i++) {
System.out.printf("%-6s", week[i]);
}
System.out.println();
for (int i = 1; i < calendar.get(Calendar.DAY_OF_WEEK); i++) {
System.out.printf("%-8s", "");
}
for (int i = 1; i <= days; i++) {
calendar.set(Calendar.DATE, i);
boolean dayOff = isDayOff(calendar);
if (dayOff) {
dayAll++;
System.out.printf("%-8s", "[" + i + "]");
} else {
System.out.printf("%-8s", i);
}
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println();
if (dayOff){
dayWeek++;
}
}
if (calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY&&dayOff){
dayWeek++;
}
}
System.out.println("总:"+dayAll+"天");
System.out.println("周末的:"+dayWeek+"天");
}
public static boolean isDayOff (Calendar calendar) throws ParseException {
String str = "2020-2-2";
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
Date date = s.parse(str);
long start = date.getTime();
long end = calendar.getTimeInMillis();
int starDay = (int) (start / 1000 / 60 / 60 / 24);
int endDay = (int) (end / 1000 / 60 / 60 / 24);
int delta = endDay - starDay;
return delta >= 0 && delta % 4 == 0;
}
}