输入年份和月份,显示该月的整个日历
package com.im;
import java.util.Scanner;
public class printCalendarl {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.print("Enter full year (e.g.,2017):");
int year = input.nextInt();
System.out.print("Enter month as a number between 1 and 12:");
int month = input.nextInt();
printMonth(year, month);
}
public static void printMonth(int year,int month){ //打印月份
printMonthTitle(year, month);
printMonthBody(year, month);
}
public static void printMonthTitle(int year,int month){ //打印月份标题
System.out.println(" "+getMonthName(month)+" "+year);
System.out.println(" *****************************");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
}
public static void printMonthBody(int year,int month){ //打印月份主体
int startDay = getStartDay(year,month);
int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
int i=0;
for(i=0; i<startDay; i++){
System.out.print(" ");
}
for(i=1; i<=numberOfDaysInMonth; i++){
System.out.printf("%4d",i);
if((i+startDay)%7==0){
System.out.println();
}
}
System.out.println();
}
public static String getMonthName(int month){ //获取月份名
String monthName = ""; //月份英文名
switch(month){
case 1:
monthName = "January 01";
break;
case 2:
monthName = "February 02";
break;
case 3:
monthName = "March 03";
break;
case 4:
monthName = "April 04";
break;
case 5:
monthName = "May 05";
break;
case 6:
monthName = "June 06";
break;
case 7:
monthName = "July 07";
break;
case 8:
monthName = "August 08";
break;
case 9:
monthName = "September 09";
break;
case 10:
monthName = "October 10";
break;
case 11:
monthName = "November 11";
break;
case 12:
monthName = "December 12";
break;
}
return monthName;
}
public static int getStartDay(int year,int month){ //获取这个月的第一天是星期几
final int START_DAY_FOR_JAN_1_1800 = 3; //定义1800年1月1日为星期三
int totalNumbersOfDay = getTotalNumberOfDay(year, month);
return (totalNumbersOfDay+START_DAY_FOR_JAN_1_1800)%7;
}
public static int getTotalNumberOfDay(int year,int month){ //获取从1800年1月1日至今的总的天数
int total = 0;
for(int i=1800; i<year; i++){ //年份累加天数
if(isLeapYear(i)){
total += 366;
}else{
total += 365;
}
}
for(int i=1; i<month; i++){ //月份累加天数
total += getNumberOfDaysInMonth(year, i);
}
return total;
}
public static int getNumberOfDaysInMonth(int year,int month){ //获取这个月总的天数
if(month==1||month==3||month==5||month==7
||month==8||month==10||month==12){
return 31;
}
if(month==4||month==6||month==9||month==11){
return 30;
}
if(month==2){
if(isLeapYear(year)){
return 29;
}else{
return 28;
}
}
return 0; //如果月份不存在
}
public static boolean isLeapYear(int year){ //判断是否闰年
return (year%4==0 && year%100!=0) || year%400==0;
}
}