java计算两个日期相隔的天数

最近遇到了一个问题,如何计算给定两个日期之间隔了多少天,这在平时的项目和面试中也比较常见,总结一发。

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
67
68
69
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class {
public static void main(String[] args) throws ParseException {

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = format.parse("1999-09-09");
Date date2 = format.parse("2011-11-11");

System.out.println(differentDays(date1, date2));//4446
System.out.println(differentDaysByMillisecond(date1, date2));//4446
System.out.println(differentDaysByCalendar(date1, date2));//4446
}

/**
* date2比date1多的天数
*/
public static int differentDays(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);

Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1 = cal1.get(Calendar.DAY_OF_YEAR);// 这一天是一年中的第几天
int day2 = cal2.get(Calendar.DAY_OF_YEAR);

int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if (year1 != year2) {
int timeDistance = 0;
for (int i = year1; i < year2; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) // 闰年
{
timeDistance += 366;
} else // 不是闰年
{
timeDistance += 365;
}
}
return timeDistance + (day2 - day1);
} else {
System.out.println("判断day2 - day1 : " + (day2 - day1));
return day2 - day1;
}
}

/**
* 通过时间秒毫秒数判断两个时间的间隔
*/
public static int differentDaysByMillisecond(Date date1, Date date2) {
int days = (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
return days;
}

public static int differentDaysByCalendar(Date date1, Date date2) throws ParseException {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int cnt = 0;
while (calendar.getTime().compareTo(date2) != 0) {
calendar.add(Calendar.DATE, 1);//calendar.add(*,-1)即是减去。calendar没有减法
cnt++;
}
return cnt;
}
}