Jobdu-1096-日期差值

Question

  • 题目描述:

    有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

  • 输入:

    有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

  • 输出:

    每组数据输出一行,即日期差值

  • 样例输入:

    2011041220110422

  • 样例输出:

    11

Answer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int date1 = sc.nextInt();
int date2 = sc.nextInt();
// exchange, s.t. date1 < date2
int temp;
if(date1 < date2){
temp = date1;
date1 = date2;
date2 = temp;
}
int year1, month1, day1, year2, month2, day2;
year1 = date1 / 10000;
month1 = (date1 / 100) % 100;
day1 = date1 % 100;
year2 = date2 / 10000;
month2 = (date2 / 100) % 100;
day2 = date2 % 100;
System.out.println(diffBetweenDates(year1, month1, day1, year2, month2, day2));
}
public static int diffBetweenDates(int year1, int month1, int day1, int year2, int month2, int day2){
int count = 0;
if(year1 == year2){
return Math.abs(countDaySinceNewYear(year1, month1, day1)-countDaySinceNewYear(year2, month2, day2));
}else{
for(int i=year1+1;i<year2;i++){
if(isLeap(i))
count += 366;
else
count += 365;
}
if(isLeap(year1))
return 367 - countDaySinceNewYear(year1, month1, day1) + count + countDaySinceNewYear(year2, month2, day2) + 1;//要求相邻两天相差2天
else
return 366 - countDaySinceNewYear(year1, month1, day1) + count + countDaySinceNewYear(year2, month2, day2) + 1;
}
}
public static boolean isLeap(int year){
//四年一闰 百年不闰 四百年再闰
if(year%4==0&&year%100!=0 || year%400==0)
return true;
else
return false;
}
public static int countDaySinceNewYear(int year, int month, int day){
int[] LeapMonth = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int[] CommonMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int farAwayFromNewYear = 0;
if(isLeap(year)){
for(int i=0;i<month;i++){
farAwayFromNewYear += LeapMonth[i];
}
farAwayFromNewYear += day;
}else{
for(int i=0;i<month;i++){
farAwayFromNewYear += CommonMonth[i];
}
farAwayFromNewYear += day;
}
return farAwayFromNewYear;
}
}