Java制作万年历
1 import java.util.*; 2 3 4 5 public class CalcDate { 6 int year; 7 int month; 8 int day; 9 10 public void Input(){//输入方法 11 12 Scanner input = new Scanner(System.in); 13 boolean flag = true;//控制检查日期格式输入是否正确的循环 14 String date = "";//日期 15 16 while(flag){ 17 System.out.print("请输入年,月,日(yyyy-mm-dd):"); 18 date = input.next(); 19 if(date.indexOf('-') != 4 && date.lastIndexOf('-') != 7){//判断日期格式 20 System.out.println("日期格式输入错误!"); 21 }else{ 22 flag = false; 23 } 24 } 25 String[] dateArr = date.split("-");//将日期字符串分割成年月日 26 year = Integer.parseInt(dateArr[0]); 27 month = Integer.parseInt(dateArr[1]); 28 day = Integer.parseInt(dateArr[2]); 29 30 int result = Calc(year,month,day);//计算 31 switch(result){ 32 case 0: 33 System.out.println("此日期是星期日"); 34 break; 35 case 1: 36 System.out.println("此日期是星期一"); 37 break; 38 case 2: 39 System.out.println("此日期是星期二"); 40 break; 41 case 3: 42 System.out.println("此日期是星期三"); 43 break; 44 case 4: 45 System.out.println("此日期是星期四"); 46 break; 47 case 5: 48 System.out.println("此日期是星期五"); 49 break; 50 case 6: 51 System.out.println("此日期是星期六"); 52 break; 53 default://异常 54 System.out.println("未知错误,程序中断!"); 55 break; 56 } 57 58 } 59 60 public void ShowCalendar(){ 61 int days = 30; 62 switch(month){//本月天数 63 case 1: 64 days = 31; 65 break; 66 case 2: 67 if(IsLeapYear(year)){//闰年 68 days = 29; 69 }else{ 70 days = 28; 71 } 72 break; 73 case 3: 74 days = 31; 75 break; 76 case 4: 77 days = 30; 78 break; 79 case 5: 80 days = 31; 81 break; 82 case 6: 83 days = 30; 84 break; 85 case 7: 86 days = 31; 87 break; 88 case 8: 89 days = 31; 90 break; 91 case 9: 92 days = 30; 93 break; 94 case 10: 95 days = 31; 96 break; 97 case 11: 98 days = 30; 99 break; 100 case 12: 101 days = 31; 102 break; 103 default://异常 104 System.out.println("未知错误"); 105 break; 106 } 107 System.out.println("本月日历为\n日\t一\t二\t三\t四\t五\t六");//显示日历 108 int first = Calc(year,month,1);//获取本月一号是星期几 109 for(int i = 0;i < first;i++){//控制本月一号之前的空格数 110 System.out.print(" \t"); 111 } 112 int j = 1;//本月一号 113 for(j = 1;j <= 7-first;j++){//第一行 114 System.out.print(j+"\t"); 115 } 116 System.out.println(); 117 while(j<days){//余下几行 118 int times = j+7; 119 for(;j<times;j++){ 120 if(j>days){ 121 break; 122 } 123 System.out.print(j+"\t"); 124 } 125 System.out.println(); 126 } 127 } 128 129 public int Calc(int y,int m,int d){//计算方法 130 if(m == 1 || m == 2){//如果月份为一月或2月,则看成上一年的十三月和十四月 131 m += 12; 132 y--; 133 } 134 return (int)((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7;//代入基尔拉姆森公式 135 } 136 137 public boolean IsLeapYear(int y){//判断是否为闰年 138 if((y % 400 == 0) ||(y % 100 != 0)&&(y % 4 ==0)){ 139 return true; 140 }else{ 141 return false; 142 } 143 } 144 145 public static void main(String[] args) { 146 CalcDate t = newCalcDate(); 147 Scanner input = new Scanner(System.in); 148 String con = ""; 149 while(true){ 150 t.Input(); 151 t.ShowCalendar(); 152 System.out.print("继续吗?(Y/N)"); 153 con = input.next(); 154 if(con.equalsIgnoreCase("Y")){ 155 continue; 156 } 157 break; 158 } 159 System.out.println("程序结束,谢谢使用!"); 160 } 161 }
//欢迎转载,请注明原创,感谢
Never give up!