判斷經過多少天
首先,先建立兩個數組,分別爲:
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;
}
}