1 import java.util.Scanner; 2 com.lv.calendarWatch//包名 3 /* 4 * 需求:输入一个年份和月份 ,显示当前月日情况 ,星期数要对应准确 5 * 1.1900年1月1号开始 6 * 2.星期 : 直接用总天数对7求余数 7 * 3.以 来个开 8 */ 9 public class Demo9 { 10 11 /** 12 * @param args 13 */ 14 public static void main(String[] args) { 15 // TODO Auto-generated method stub 16 17 Demo9 demo = new Demo9(); 18 Scanner keyInput =new Scanner(System.in); 19 System.out.println("请输入你想要查的年"); 20 int key1 = keyInput.nextInt(); 21 System.out.println("请输入你想要查的月份"); 22 int key2 = keyInput.nextInt(); 23 demo.show(key1,key2); 24 25 } 26 27 //定义一个工具方法:判断平年还是闰年 28 public boolean isLeapYear(int year){ 29 30 if(year % 400 == 0 || (year % 4==0 && year % 100 != 0)){ 31 32 return true; 33 } 34 35 return false; 36 } 37 38 //计算输入年份下,月份的总天数 1900 39 40 public int getTotalDateFrom(int year , int month){ 41 42 //1.定年份的总天数 43 int totalDate = 0;//1900到你输入的年份的总天数 2016 1900 - 1903 = 3 44 for(int i= 1900 ; i < year ;i++){ 45 46 if(isLeapYear(i)){ // 闰年 47 48 totalDate += 366; 49 }else { 50 51 totalDate += 365; 52 } 53 } 54 55 //2.计算月份的天数 56 for(int i = 1 ; i< month ;i++){ 57 58 totalDate += getDayOfMonth(year, i); 59 } 60 61 return totalDate; 62 63 } 64 65 66 67 public int getDayOfMonth(int year , int month){ 68 69 switch (month) { 70 case 1: 71 case 3: 72 case 5: 73 case 7: 74 case 8: 75 case 10: 76 case 12: 77 78 return 31; 79 80 case 4: 81 case 6: 82 case 9: 83 case 11: 84 return 30; 85 case 2: 86 if(isLeapYear(year)){ 87 88 return 29; 89 }else { 90 91 return 28; 92 } 93 default: 94 return 30; 95 } 96 } 97 98 public int printSpace(int year , int month){ 99 100 return getTotalDateFrom(year, month) % 7; 101 } 102 103 public void print(int year , int month){ 104 105 int countSpac = printSpace(year, month) + 1; // 空格的个数 106 int count = 0; //定义一个计数 107 for(int i = 1; i<=countSpac; i++){ 108 count++; 109 System.out.print(" "); 110 } 111 112 //2.打印日期 113 for(int i = 1 ; i<=getDayOfMonth(year, month);i++){ 114 115 if(count % 7 == 0){ 116 117 System.out.println(); 118 } 119 count++; 120 System.out.print(i+" "); 121 122 } 123 124 } 125 126 public void show(int year , int month){ 127 128 System.out.println("******************"+year+"****"+month+"***************************"); 129 System.out.println("======================================================"); 130 System.out.println("日 一 二 三 四 五 六"); 131 System.out.println("======================================================"); 132 print(year, month); 133 System.out.println(); 134 } 135 136 137 }
运行结果如下所示: