题目描述
日期问题按模板写,1.先定义每个月的天数
2.判断闰年
3.获取某年某月的天数
样例
import java.util.*;
/*
1年1月1日 到 a日期,一共有t天
1年1月1日 到 b日期,一共有k天
所以a、b日期之间的天数= Math.abs(t - k + 1)
*/
public class Main {
// 定义每个月的天数 月份0为0天
private static final int[] months = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 判断闰年
private static int isLeap(int year) {
return (year % 100 != 0 && year % 4 == 0) || (year % 400 == 0) ? 1 : 0;
}
// 获取某年某月的天数
private static int getMonthDays(int year, int month) {
int res = months[month];
//如果是闰年的二月,多加1天
if (month == 2) res += isLeap(year);
return res;
}
// 获取从公元元年到指定日期的总天数
private static int getTotalDays(String s) {
//public String substring(int beginIndex, int endIndex)
//beginIndex -- 起始索引(包括), 索引从 0 开始。
//endIndex -- 结束索引(不包括)
int y=Integer.parseInt(s.substring(0,4)),m=Integer.parseInt(s.substring(4,6)),d=Integer.parseInt(s.substring(6));
int res = 0;
//如果是闰年,多加一天
for (int i = 1; i < y; i++)
res += 365 + isLeap(i);
for (int i = 1; i < m; i++)
res += getMonthDays(y, i);
return res + d;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String t = sc.next();
String k = sc.next();
System.out.println(Math.abs(getTotalDays(t) - getTotalDays(k)) + 1);
}
}
}