判断经过多少天
首先,先建立两个数组,分别为:
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;
}
}