java基本语句打印日历

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入如年份:");
        int year = scanner.nextInt();
        int dayOfWeek = 3;        //记录星期几,以2020-1-1为基准,星期三
        int day=0 ;        //记录每个月有多少天
            
        //2020年往后,用增加的天数模7,加到星期三得到新的星期,当超过7的时候,在模7就可以
        if (year > 2020) {    
            for (int i = 2020; i < year; i++) {
                if (i % 400 == 0 || (i % 100 != 0 && i % 4 == 0)) {
                    dayOfWeek = (366 % 7 + dayOfWeek) % 7;
                } else {
                    dayOfWeek = (365 % 7 + dayOfWeek) % 7;
                }
            }
        }
        
        //在2020年之前,用相差的天数模7,从周三减去,先加7在取模得到星期
        if (year < 2020) {
            for (int i = 2019; i >= year; i--) {
                if (i % 400 == 0 || (i % 100 != 0 && i % 4 == 0)) {
                    dayOfWeek = (dayOfWeek - 366 % 7 + 7) % 7;
                } else {
                    dayOfWeek = (dayOfWeek - 365 % 7 + 7) % 7;
                }
            }
        }
        
        //得到星期后,将周日的dayOfWeek改为7,方便使用
        if (dayOfWeek == 0) {
            dayOfWeek = 7;
        }

        
        //开始打印
        for (int i = 1; i <= 12; i++) {

            
            //判断每个月的天数day
            switch (i) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                day = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                day = 30;
                break;
            case 2:
                if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {
                    day = 29;
                    break;
                } else {
                    day = 28;
                    break;
                }
            }

            //打印表头
            System.out.println("\n---------------------" + year + "年" + i + "月" + "---------------------");
            System.out.println();
            System.out.println("一\t二\t三\t四\t五\t六\t日");
            
            //打印前面的空位
            for (int j = 0; j < dayOfWeek - 1; j++) {
                System.out.print("\t");
            }
            
            //打印日期
            for (int j = 1; j <= day; j++) {
                System.out.print(j + "\t");
                if (++dayOfWeek > 7) {        //每打一天星期后移,打完周日换行,dayOfWeek归1
                    System.out.println();
                    dayOfWeek = 1;
                }
            }
        }
        scanner.close();
    }

 

posted @ 2020-09-14 10:48  气球i  阅读(266)  评论(0编辑  收藏  举报