萬年曆-java實現簡單萬年曆
阿新 • • 發佈:2018-12-25
萬年曆
public class WanNianLi {
public static void main(String[] args){
//思路:
//1、構建Scanner掃描器類的物件
Scanner input = new Scanner(System.in);
//2、從控制檯接收使用者錄入的年份、月份
System.out.println("輸入年");
int year = input.nextInt();
System.out.println("輸入月" );
int month = input.nextInt();
//3、獲得1900年距離當前年份上一年的總天數
int totalDays = getFromNowYearTo1900TotalDays(year);
//4、獲得當前年份所經過的天數
int totalDaysThisYear = getNowYearPassedTotalDays(year,month);
//5、求得給定月份第一天的星期數
int week = (totalDays + totalDaysThisYear +1 ) % 7;//星期日是,week = 0
//6、格式化輸出日曆
formatCalendarOutput(week,year,month);
}
/**
*格式化輸出日曆
*@param week:當前月份第一天的星期數
*@param year:當前年份
*@param month:當前月份
*/
public static void formatCalendarOutput(int week,int year,int month){
int cnt = 0;//計數器,記錄空白數和日期數的和
//1) 打印表頭
System.out.println("星期日\t\t星期一\t\t星期二\t\t星期三\t\t星期四\t\t星期五\t\t星期六");
//2)列印空白(觀察星期與之前空個數之間的規律)
for(int i=1;i<= week;i++){
System.out.print("\t\t");
cnt++;
}
//3) 列印日曆
for(int i=1;i<=getNowMonthDays(year,month);i++){
System.out.print(i+"\t\t");
cnt++;
//若記錄空白數和日期數的和是七的倍數,應該換行輸出
if(cnt % 7 == 0){
System.out.println();
}
}
}
/**
*判斷給定的年份是否為閏年
*@param year:給定的年份
*@return true:閏年;false:平年
*/
public static boolean isLeapYear(int year){
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
/**
*根據引數指定的年份,月份,求出當前月的總天數
*@param year:年份
*@param month:月份
*@return 月的總天數
*/
public static int getNowMonthDays(int year,int month){//year:設計該引數的原因,2月份根據年份是否是閏年來確定其天數的
switch(month){
case 2:
return isLeapYear(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
/**
*獲得當前年份的上一年距離1900年所經過的總天數
*@param year 當前年份
*@return 總天數
*/
public static int getFromNowYearTo1900TotalDays(int year){
int totalDays = 0;
for(int i = 1900; i< year; i++){//i:年份
totalDays += isLeapYear(i) ? 366 : 365;
}
return totalDays;
}
/**
*求出當前年份經過的總天數(從當前年的1月1日到給定月份的上一個月最末一天)
*@param year:年份
*@param month:月份
*@return 總天數
*/
public static int getNowYearPassedTotalDays(int year,int month){
int totalDays = 0;
for(int i=1;i< month;i++){//i:月份
totalDays += getNowMonthDays(year,i);
}
return totalDays;
}
}
轉載希望標明出處,謝謝