1 //输入年份和月份,打印出这个月的日历表 2 /* 3 1.1900年1月1日是星期一 4 2.计算输入的年份距离1900年有多少天再计算当年1月1日距这个月有多少天 5 1) 6 3.总天数%7得出从星期几开始 7 注:计算机中的时间最小到1900年,此外UNIX系统认为1970年1月1日0点是时间纪元。 8 so,在本程序中不考了1900年以前的年份了。有兴趣的可以自己研究下。 9 */ 10 import java.util.Scanner; 11 class Calender{ 12 13 public static void main(String[] args){ 14 15 print(); 16 17 } 18 19 //打印输出 20 public static void print(){ 21 Scanner sc = new Scanner(System.in); 22 System.out.println("请输入年份:"); 23 int year = sc.nextInt(); 24 System.out.println("请输入月份(1~12):"); 25 int month = sc.nextInt(); 26 27 int days = getDays(year, month);//getDays方法详细请往下看 28 //days+1:day是总天数,输入月份的总天数只是这个月之前的天数, 29 //加上1变为这个月开始的第一天 30 int week = days%7==0?1:days%7+1;//开始的第一天是星期几 31 System.out.println("日\t一\t二\t三\t四\t五\t六"); 32 33 //输出第一行(第一个星期)空出来部分 34 for(int i=1; i<=week; i++){ 35 System.out.print(" \t"); 36 } 37 38 //输出第一行(第一个星期)各天 39 for(int i=1; i<=7-week; i++){ 40 System.out.print(i+"\t"); 41 } 42 43 System.out.println(); 44 45 //1~12月的个月天数 46 int monthDay = 0; 47 switch(month){ 48 case 2: 49 if(year%4==0&&year%100!=0 || year%400==0 ){ 50 monthDay=29; 51 }else{ 52 monthDay=28; 53 } 54 break; 55 56 case 4: 57 case 6: 58 case 9: 59 case 11: 60 monthDay=30; 61 break; 62 63 default : 64 monthDay=31; 65 break; 66 } 67 68 //输出剩下的日期,从第二周开始了,所以是8-week 69 for(int i=8-week; i<=monthDay; i++){ 70 71 System.out.print(i+"\t"); 72 73 //每七天换一行则当日期能整除7就换行 74 if((i+week)%7==0){ 75 System.out.println(); 76 } 77 } 78 79 80 } 81 82 /* 83 计算当年当月的距1900年1.1的总天数 84 */ 85 public static int getDays(int year, int month){ 86 //判断这年是闰年或者平年,得到年的总天数 87 int day1=0, day2=0; 88 89 for(int i=1900; i<year; i++){ 90 if(i%4==0&&i%100!=0 || i%400==0){ 91 day1+=366; 92 }else{ 93 day1+=365; 94 } 95 } 96 97 //得到月的总天数 98 for(int i=1; i<month; i++){ 99 switch(i){ 100 case 2: 101 if(year%4==0&&year%100!=0 || year%400==0 ){ 102 day2+=29; 103 }else{ 104 day2+=28; 105 } 106 break; 107 108 case 4: 109 case 6: 110 case 9: 111 case 11: 112 day2+=30; 113 break; 114 115 default : 116 day2+=31; 117 break; 118 } 119 } 120 121 return day1+day2; 122 123 } 124 125 }
时间: 2024-11-10 10:28:34