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