1 import java.util.*; 2 class CalendarTest 3 { 4 /*先输出提示语句,并接受用户输入的年、月。 5 根据用户输入的年,先判断是否是闰年。 6 根据用户输入的年份来判断月的天数。 7 用循环计算用户输入的年份距1900年1月1日的总天数。 8 用循环计算用户输入的月份距输入的年份的1月1日共有多少天。 9 相加计算天数,得到总天数。 10 用总天数来计算输入月的第一天的星期数。 11 12 根据上值,格式化输出这个月的日历。*/ 13 public static void main(String[] args) 14 { 15 // System.out.println("Hello World!"); 16 17 Scanner sc= new Scanner(System.in); 18 //***************************************** 19 //先输出提示输入年、月。 20 System.out.print("输入年份:"); 21 int year=sc.nextInt(); 22 System.out.print("输入月份:"); 23 int month=sc.nextInt(); 24 //***************************************** 25 //是否是闰年。 26 boolean comLeap=isLeapYear(year); 27 //***************************************** 28 //月的天数。 29 30 System.out.println(year+"年"+month+"月有"+monthDayNum(month,comLeap)+"天"); 31 32 //1900年到输入年总天数。 33 int i=1900 ,j=0; 34 while (i<year) 35 { 36 j+= isLeapYear(i)?366:365; 37 i++; 38 } 39 40 System.out.println(year+"年距1900年1月1日已经"+j+"天"); 41 42 43 //计算输入的月份距输入的年份的1月1日共有多少天。 44 int mDayNum=0; 45 int a=0; 46 for (int month1=1;month1<= month ;month1++ )//1月1日到输入月1日天数 47 { 48 mDayNum+=a; 49 a=monthDayNum(month1,comLeap); 50 51 //累加月天数 52 } 53 System.out.println(year+"年到"+month+"月有"+mDayNum+"天"); 54 55 //相加计算天数,得到总天数。 56 int zDay=j+mDayNum; 57 System.out.println(year+"年"+month+"月距1900年1月1日已经"+zDay+"天"); 58 59 //用总天数来计算输入月的第一天的星期数。 60 int starDay; 61 /*if (zDay<1){starDay=1;} 62 else{starDay=(zDay%7)+1;}*/ 63 starDay=zDay<1 ?1:(zDay%7)+1; 64 System.out.println("今天是星期"+starDay);
//根据上值,格式化输出这个月的日历。 65 66 System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六"); 67 68 int hh=0;//记录换行的地点 69 for (int sp=1;sp<=starDay ;sp++)//需要空出位置打印对应星期的日期 70 { 71 System.out.print(" "+"\t"); 72 hh++; 73 } 74 75 for (int l=1;l<=monthDayNum(month,comLeap) ;l++)//打印每月天数 76 { 77 78 System.out.print(" "+l+"\t"); 79 hh++; 80 while (hh==7) 81 {System.out.println(); 82 hh=0; 83 } 84 } 85 } 86 87 //***************************************** 88 //判断是否是闰年。 89 static boolean isLeapYear(int year) 90 { 91 if ((year%4==0&& year%100!=0)||(year%400==0)) 92 {return true; 93 } 94 return false; 95 96 } 97 //***************************************** 98 //根据输入的年份来判断月的天数。 99 static int monthDayNum(int month,boolean comLeap) 100 { 101 int dayNum; 102 if (month>=8){dayNum= month%2==0?31:30;}//月份大于八月且奇数是30天 103 104 else if (month==2){dayNum= comLeap ?29:28;}//2月 用闰年返回值来 赋值天数 105 106 else dayNum=month%2!=0?31:30;//小于七月奇数是31天 107 108 return dayNum; 109 } 110 111 112 }
原文:http://www.cnblogs.com/coldDog/p/6395400.html