Java 万年历 计算月天数等

作者:TangHanF(GuoFu)

日期:Jul 26, 2018

说明:转载请注明出处,谢谢!🤝

联系方式:guofu_gh@163.com

运行效果图

代码实现

import java.util.Scanner;
public class MyCalendar {
    public static void main(String[] args) {
        //System.out.println(getTotalDays(2017,3));
        printCalendar();
    }
    public static void printCalendar() {
        System.out.println("请输入4位年份");
        Scanner input = new Scanner(System. in );
        int nian = input.nextInt();
        System.out.println("请输入月份");
        int yue = input.nextInt();
        System.out.println("\t\t\t" + nian + "," + yue);
        System.out.println("----------------------------------------------------------");
        System.out.println("星期日    星期一    星期二    星期三    星期四    星期五    星期六");
        //1号前边先打印几个 \t,打印几个呢  应该是getTotalDays(年,月)
        int spaces = getTotalDays(nian, yue) % 7;
        for (int i = 0; i < spaces; i++) {
            System.out.print("\t");
        }
        int days = getDaysOfMonth(nian, yue);
        for (int i = 1; i <= days; i++) {
            System.out.print(i + "\t");
            if ((i + spaces) % 7 == 0) {
                System.out.println();
            }
        }
    }
    //定义一个方法,返回1905年1.1 到指定年份指定月份的上一个月月底,一共有多少天? 2017 4
    //1905.1.1  -  2017.3.31 总天数
    //1905.1.1 - 2016.12.31  +  会求!
    //2017.1.1 - 2017.3.31  会求!
    private static int getTotalDays(int year, int month) {
        return getDaysFrom1905(year) + getDaysThisYear(year, month);
    }
    //定义一个方法,返回指定年份1月1日 到 指定月份的前一个月月底的天数,  2017.4    2017.1.1-2017.3.31
    public static int getDaysThisYear(int year, int month) { //2017.4
        //一共  , 累加  循环  for
        int sum = 0;
        for (int i = 1; i < month; i++) {
            sum += getDaysOfMonth(year, i);
        }
        return sum;
    }
    //定义一个方法; 返回指定年份,指定月份的天数1842 1 3 5 7 8 10 12 
    // 4 6 9 11   --- 30   2 -- 平年 28  闰年29年
    private static int getDaysOfMonth(int year, int month) {
        /*if(month == 1 ||month == 3 ||month == 5

             ||month == 7 ||month == 8 ||month == 10 ||month == 12){

         return 31;

     }else if(month == 4||month == 6 ||month == 9 ||month == 11){

         return 30;

     }else if(month == 2){

         //需要对当前年份进行判断

         if(isRun(year)){

             return 29;

         }else{

             return 28;

         }

     }else{

         return 0;

     }*/
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return 31;
            case 4:
            case 6:
            case 9:
            case 11:
                return 30;
            case 2:
                if (isRun(year)) {
                    return 29;
                } else {
                    return 28;
                }
            default:
                return 0;
        }
    }
    //从1905年 到指定年份的上一年的年底一共多少天;2017  1905.1.1 - 2016.12.31
    //求和 -- 累加  --  循环 1905-365 1906-365 1907-365 1908-366
    private static int getDaysFrom1905(int year) { //1909
        int sum = 0;
        for (int i = 1905; i < year; i++) {
            //如果闰年  += 366   1905  1906 1907 1908
            if (isRun(i)) {
                //是
                sum += 366;
            } else {
                sum += 365;
            }
        }
        return sum;
    }
    // 定义一个方法,判断某个年份是否是闰年,如果是返回true,否则返回false;
    private static boolean isRun(int year) {
        // 2016 是 2017 不是 2000 是 2100 不是
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
            return true;
        }
        return false;
    }

results matching ""

    No results matching ""