13693261870
2025-07-02 6708810c4de34dfb9513061432d656f91d56ee3a
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package com.ruoyi.buss.common;
 
import java.text.DecimalFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
 
public class DateUtils {
 
    public static Date setToNextDayZero(Date originalDate) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(originalDate);
 
        // 增加一天
        calendar.add(Calendar.DAY_OF_MONTH, 1);
 
        // 设置为零点
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
 
        return calendar.getTime();
    }
 
    /**
     * 获取两个日期之间的天数差
     * @param date1
     * @param date2
     * @return
     */
    public static long getSubtractOfTowDate(Date date1, Date date2) {
        // 计算毫秒差
        long diffMillis = Math.abs(date2.getTime() - date1.getTime());
        // 转换为天数并向上取整
        double days = (double) diffMillis / (24 * 60 * 60 * 1000);
        long roundedDays = (long) Math.ceil(days);
        return roundedDays;
    }
 
    /**
     * 获取两个日期之间的小时数差
     * @param date1
     * @param date2
     * @return
     */
    public static double getDisHourOfTowDate(Date date1, Date date2) {
        // 将Date转换为Instant
        Instant instant1 = date1.toInstant();
        Instant instant2 = date2.toInstant();
 
        // 计算持续时间
        Duration duration = Duration.between(instant1, instant2);
 
        // 获取总秒数并转换为小时(向上取整)
        long totalSeconds = duration.getSeconds();
        int hours = (int) Math.ceil((double) totalSeconds / 3600);
        return hours;
    }
 
    /**
     * 根据开始时间startTime,获取hours小时后的具体时间
     * @param startDate
     * @param hours
     * @return
     */
    public static Date getDateAfterHours(Date startDate, int hours) {
        // 把Date转换为LocalDateTime
        LocalDateTime localDateTime = startDate.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
 
        // 加上指定的小时数
        LocalDateTime newDateTime = localDateTime.plusHours(hours);
 
        // 再转回Date类型
        Instant instant = newDateTime.atZone(ZoneId.systemDefault()).toInstant();
        return Date.from(instant);
    }
 
    /**
     * 判断两个时间是否在同一天内
     * @param date1
     * @param date2
     * @return
     */
    public static boolean isSameDay(Date date1, Date date2) {
        // 转换为LocalDate(忽略时区,使用系统默认时区)
        LocalDate localDate1 = date1.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();
        LocalDate localDate2 = date2.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();
        // 判断是否为同一天
        return localDate1.isEqual(localDate2);
    }
 
    public static void main(String[] args) {
        String date1 = "2025-05-21 21:10:00";
        String date2 = "2025-05-22 23:20:00";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 解析字符串为LocalDateTime
        LocalDateTime localDateTime1 = LocalDateTime.parse(date1, formatter);
        LocalDateTime localDateTime2 = LocalDateTime.parse(date2, formatter);
        // 转换为Date(需要指定时区,这里使用系统默认时区)
        Instant instant1 = localDateTime1.atZone(ZoneId.systemDefault()).toInstant();
        Instant instant2 = localDateTime2.atZone(ZoneId.systemDefault()).toInstant();
        Date date11 = Date.from(instant1);
        Date date22 = Date.from(instant2);
        long result = getSubtractOfTowDate(date11, date22);
        System.out.println(result);
    }
}