//题目:
学者A去国外求学,假定离开祖国的日子为公元A年B月C日,返回的日子为
公元X年Y月Z日。请计算A出国求学的总天数(含离开和返回的当天)
import java.util.Scanner;
@SuppressWarnings({"all"})
public class 类名 {
public static boolean isRunNian(int year) { //leapyear 闰年
boolean flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
public static int countDays(String newDate, String oldDate) {
String regex = "\\D+"; //一个或多个非数字字符
int sumdays = 0; //总计出国天数
int year = 365; //初始化按 非闰年的天数
int[] day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String[] oldArr = oldDate.split(regex); //字符串分割 年,月,日放数组里
String[] newArr = newDate.split(regex);
//Integer.parseInt() 把String转为int型
int oldYear = Integer.parseInt(oldArr[0]); //split后 [0]存放年
int newYear = Integer.parseInt(newArr[0]);
int oldMonth = Integer.parseInt(oldArr[1]); //[1]存放月
int newMonth = Integer.parseInt(newArr[1]);
int oldDay = Integer.parseInt(oldArr[2]); //[2]存放日
int newDay = Integer.parseInt(newArr[2]);
System.out.println("old年" + oldYear + " old月" + oldMonth + " old日" + oldDay);
System.out.println("now年" + newYear + " now月" + newMonth + " now日" + newDay);
//注意有doldYear == newYear这种情况
if (oldYear == newYear) {
//判断闰年,来确定2月有多少天
if (isRunNian(oldYear)) {
day[1] = 29;
}
int sumdays1 = day[oldMonth - 1] - oldDay + 1;
for (int j = oldMonth; j < 12; j++) {
sumdays1 += day[j];
}
int sumdays2 = day[newMonth - 1] - newDay + 1;
for (int j = newMonth; j < 12; j++) {
sumdays2 += day[j];
}
return sumdays1 - sumdays2 + 1;
}
//下面
for (int i = oldYear; i <= newYear; i++) {
day[1] = 28;
year = 365;
if (isRunNian(i)) {
day[1] = 29;
year = 366;
}
if (i == oldYear) {
sumdays = day[oldMonth - 1] - oldDay + 1; //
for (int j = oldMonth; j < 12; j++) {
sumdays += day[j];
}
} else if (i == newYear) {
for (int j = 0; j < newMonth - 1; j++) {
sumdays += day[j];
}
sumdays += newDay;
} else {
sumdays += year;
}
}
return sumdays;
}
public static void main(String[] args) {
String newString = "2022年8月26日";
String oldString = "2022年3月21日";
System.out.println("求学的天数是:" + countDays(newString, oldString));
}
}