# 计算两日期相差的天数

```  1 public static void main(String[] args) throws ParseException {
2
3         SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
4         String beginStr1 = "2021/11/24 10:50:13";   // 开始时间1
5         String beginStr2 = "2022/04/11 10:50:15";   // 开始时间2，注意时间中的时分秒对getAlmostDayRangeWithoutDay方法的影响
6
7         Date begin=sdf.parse(beginStr1);
8         Date end=sdf.parse(beginStr2);
9
10         System.out.println(getAlmostDayRangeWithoutDay(begin, end));
11
12         System.out.println(getDayRange(begin,end));
13 }
14
15  /**
16      * 帮助方法:{0,日期1}与{1,日期2}相差的天数(不足一天舍去)
17      *
18      * @param beginDate 开始日期
19      * @param endDate   结束日期
20      * @return 两个日期间相差的天数(不足一天舍去)
21      */
22     public static int getAlmostDayRangeWithoutDay(Date beginDate, Date endDate) {
23         if (beginDate == null || endDate == null) {
24             return 0;
25         }
26         boolean isNegative = false;
27         if (beginDate.after(endDate)) {
28             Date temp = beginDate;
29             beginDate = endDate;
30             endDate = temp;
31             isNegative = true;
32         }
33
34         Calendar calenderBegin = Calendar.getInstance();
35         Calendar calenderEnd = Calendar.getInstance();
36
37         calenderBegin.setTime(beginDate);
38         calenderEnd.setTime(endDate);
39
40         calenderBegin.set(Calendar.MILLISECOND, 0);
41         calenderEnd.set(Calendar.MILLISECOND, 0);
42
43         if (!calenderBegin.before(calenderEnd) && !calenderBegin.after(calenderEnd)) {
44             return 0;
45         }
46
47         int dayRange = 0;
48         while (calenderBegin.before(calenderEnd)) { //日期+1，day_of_month效果一样
49             calenderBegin.add(Calendar.DAY_OF_MONTH, 1);
50             dayRange += 1;
51         }
52
53         if (calenderBegin.after(calenderEnd)) {  //不足一天减去一天
54             dayRange -= 1;
55         }
56
57
58         if (isNegative) {
59             dayRange = dayRange * -1;
60         }
61
62         return dayRange;
63     }
64
65     /**
66      * 帮助方法:{0,日期1}与{1,日期2}相差的天数(忽略小时)
67      *
68      * @param beginDate1 开始日期
69      * @param endDate1   结束日期
70      * @return 两个日期间相差的天数(忽略小时)
71      */
72     public static int getDayRange(Date beginDate1, Date endDate1) {
73
74         SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd" );
75         Date beginDate =null;
76         Date endDate =null;
77         try {
78             beginDate = sdf.parse(sdf.format(beginDate1));
79             endDate = sdf.parse(sdf.format(endDate1));
80         } catch (ParseException e) {
81             e.printStackTrace();
82         }
83
84         if (beginDate == null || endDate == null) {
85             return 0;
86         }
87         boolean isNegative = false;
88
89         if (beginDate.after(endDate)) {
90             Date temp = beginDate;
91             beginDate = endDate;
92             endDate = temp;
93             isNegative = true;
94         }
95         Calendar calenderBegin = Calendar.getInstance();
96         Calendar calenderEnd = Calendar.getInstance();
97         calenderBegin.setTime(beginDate);
98         calenderEnd.setTime(endDate);
99
100         int dayRange = 0;
101         while (calenderBegin.getTime().before(calenderEnd.getTime())) {
102             calenderBegin.add(Calendar.DAY_OF_MONTH, 1);
103             dayRange += 1;
104         }
105
106         System.out.println(calenderBegin.getTime());
107         if (isNegative) {
108             dayRange = dayRange * -1;
109         }
110
111         return dayRange;
112     }```

Java类计算两日期之间相差的天数，方法一不满一天舍去；方法二忽略对小时的计算，仅计算日期

138
137