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); } }