万年历

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;
 * */

 

posted @ 2013-01-17 14:28  后飞IT  阅读(297)  评论(0编辑  收藏  举报