万年历
import java.util.Scanner; public class Calendar { public static void main(String[] args) { //输入当前要查询的日期 System.out.println("请输入当前的年月日:格式如:1991 2 6"); Scanner sc=new Scanner(System.in); int year=sc.nextInt(); int month=sc.nextInt(); int day=sc.nextInt(); System.out.println("您输入的日期是:"+year+"-"+month+"-"+day); //设置一个数组用于存放每个月份的天数,其中2月份默认为29天 int days[]={31,29,31,30,31,30,31,31,30,31,30,31}; //要算出月份是从星期几开始,需要求出从1900-1-1到现在的这个月开始时的总天数+1 //计算从1900年到输入年份的上一个年份的最后一天的天数 int sumDays=0; for(int i=1900;i<year;i++){ //判断是否是闰年,分别加上365和366 if(isLeapYear(i)){ sumDays+=366; }else{ sumDays+=365; } } //计算从今年已经到这个月一号前的天数 for(int i=0;i<month-1;i++){ sumDays+=days[i]; } //不为闰年时,需要减去一 if(month>2&&!isLeapYear(year)){ sumDays--; } //这一步为什么要一?到晚上查下万年历,查下1900-1-1 是星期几 1900-2-1 又是星期几 就知道了 sumDays++; //System.out.println(sumDays); //计算这个月是从星期几开始的是用总天数%7得到的数字,0-6分别对应周日到周一 int weekDay=sumDays%7; //输出万年历的表格 System.out.println("星期日\t"+"星期一\t"+"星期二\t"+"星期三\t"+"星期四\t"+"星期五\t"+"星期六\t"); //weekDay是多少就输出多少个制表格 for(int i=0;i<weekDay;i++){ System.out.print("\t"); } //制表格输出结束后就开始出书当月的天数 for(int i=1;i<=days[month-1];i++){ if(i!=day){ System.out.print(i+"\t"); }else{ System.out.print(i+"*\t");//比较出当前的日期 } //每七个就换行 if((weekDay+i)%7==0){ System.out.println(); } } } //判断传进来的年是不是闰年(leapyear) static boolean isLeapYear(int year){ if((year%4==0&&year%100!=0)||year%400==0){ return true; }else{ return false; } } } /* * 本人基础有限啊!最近在好好地补习。现在闲谈下,这个所谓万年历的编程过程是怎么样的。 * 其实这个中间需要知道的几点就是: * 1、1900-1-1 是从星期一开始的! * 2、如何判断那个月是从星期几开始 * 要想判断当月是从星期几开始的,必须先求出1900到这个月份的天数+1,比如从1900-1-1是星期一,那么总天数为0+1=1;1%7=1;所以是从星期一开始的。 * 求总天数+1;是求从1900到这一年开始的天数,再加上到这个月开始的天数+1; * */