判断指定日期经过的天数

判断经过多少天

首先,先建立两个数组,分别为:
        int[] commonYear = {31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
        int[] leapYear = {31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};

        分别用于存储平年和闰年的日期和,在用的时候可以利用下标调用,

        例如: 2000年2月12日 可以 利用 commonYear[2-1]+12 来计算是本年的第多少天

然后,利用循环从2000年开始到对应年份的前一年,每次都要判断是否为闰年。

           如果是闰年 sum+=366

           如果是平年 sum+=365

最后,再加上本年日期经过的天数

 

最初的代码:

package Demo_02;


/**
 * 判断指定日期经过的天数
 */
public class Management {
    public static void main(String[] args) {
        DataNum dataNum = new DataNum();
    }
}
package Demo_02;

import java.util.Scanner;

public class DataNum {
    public DataNum() {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入当前年月日(****-**-**):");
        String year = input.next();
        int dateNum = judgeNum(year);
        System.out.println("距2000年1月1日已经过了" + dateNum + "天");
    }

    public int judgeNum(String data) {
        char[] date = data.toCharArray();
        //平年
        int[] commonYear = {31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
        //闰年
        int[] leapYear = {31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
        int year = (date[0] - '0') * 1000 + (date[1] - '0') * 100 + (date[2] - '0') * 10 + (date[3] - '0');
        int month = (date[5] - '0') * 10 + (date[6] - '0');
        int day = (date[8] - '0') * 10 + (date[9] - '0');
        int dateNum = 0;
        for (int i = 2000; i < year; i++) {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                dateNum += 366;
            } else {
                dateNum += 365;
            }
        }
        if (year % 4 == 0 && year % 100 == 0 || year % 400 == 0) {
            dateNum += leapYear[month - 1] + day;
        } else {
            dateNum += commonYear[month - 1] + day;
        }
        return dateNum;
    }
}

更改之后:

因为在输入年份的时候如果不按照特定的格式输入的话,在计算上面会出现错误,所以在日期输入上面加入了错误处理,

如果不正确,需要重新输入。包括,如果输入2月30日的话也会报错,并要求重新输入。

package Demo_02;


/**
 * 判断指定日期经过的天数
 */
public class Management {
    public static void main(String[] args) {
        DataNum dataNum = new DataNum();
    }
}
package Demo_02;

import java.util.Scanner;


public class DataNum {
    public DataNum() {

        Scanner input = new Scanner(System.in);
        String data = null;
        while (true) {
            try {
                System.out.print("请输入当前年月日(****-**-**):");
                data = input.next();
                char[] date = data.toCharArray();
                int day = (date[8] - '0') * 10 + date[9] - '0';
                int month = (date[5] - '0') * 10 + date[6] - '0';
                int year = (date[0] - '0') * 1000 + (date[1] - '0') * 100 + (date[2] - '0') * 10 + date[3] - '0';
                if (date[4] == '-' && date[7] == '-' && (((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && day <= 31 && day > 0) ||
                        ((month == 4 || month == 6 || month == 9 || month == 11) && day <= 30 && day > 0) ||
                        (month == 2 && day <= 29 && day > 0 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) || (month == 2 && day <= 28 && day > 0))) {
                    break;
                } else {
                    throw new Exception("年份输入错误!");
                }
            } catch (Exception e) {
                System.out.println("年份输入错误,请重新输入!");
                System.out.println("************************************");
            }

        }
        int dateNum = judgeNum(data);
        System.out.println("距2000年1月1日已经过了" + dateNum + "天");
    }

    public int judgeNum(String data) {
        char[] date = data.toCharArray();
        //平年
        int[] commonYear = {0,31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
        //闰年
        int[] leapYear = {0,31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
        int year = (date[0] - '0') * 1000 + (date[1] - '0') * 100 + (date[2] - '0') * 10 + (date[3] - '0');
        int month = (date[5] - '0') * 10 + (date[6] - '0');
        int day = (date[8] - '0') * 10 + (date[9] - '0');
        int dateNum = 0;
        for (int i = 2000; i < year; i++) {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                dateNum += 366;
            } else {
                dateNum += 365;
            }
        }
        if (year % 4 == 0 && year % 100 == 0 || year % 400 == 0) {
            dateNum += leapYear[month - 1] + day;
        } else {
            dateNum += commonYear[month - 1] + day;
        }
        return dateNum;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章