判斷指定日期經過的天數

判斷經過多少天

首先,先建立兩個數組,分別爲:
        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;
    }
}

 

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