关键字
DateUtil.offsetDay(’2024-3-7 15:30:00‘, 1) 给这个时间+几天= 2024-3-8 15:30:00
DateUtil.beginOfDay("2024-3-7 15:30:00“); 获取时间的起始日=2024-3-7 00:00:00
DateUtil.offsetHour(”2024-3-7 00:00:00", 9) 给时间往后推小时=2024-3-7 09:00:00
DateUtil.offsetMinute("2024-3-7 00:00:00'; 30) 给时间往后推分钟=2024-3-7 00:30:00
DateUtil.between(2024-3-7 00:00:00,2024-3-7 00:30:00, DateUnit.MINUTE) 计算两个时间之间相差的分钟并取绝对值
public static Date doGetSkipNonWorkTimeByMinutes(Date currentTime,int numMinute){
//变量------>numMinute分钟后的时间
Date futureTime = null;
//获取当前时间的小时
int currentHour = DateUtil.hour(currentTime, true);
//每天的工作时间----->上午9点到下午18点(分钟)
int workTimeMinuteEverDay = (18-9)*60;
//延长的分钟除工作时间------>计算需要延长多少天
int num=numMinute/workTimeMinuteEverDay;
//判定当前时间区间
//大于等于下午18点
if (currentHour >= 18) {
//增加天(不算今天)
//原始日期+ (延长的分钟除工作时间---->计算多少天+ 1)
futureTime = DateUtil.offsetDay(currentTime, num+1);
//原始日期+ (越长的分钟除工作时间---->计算多少天+ 1)后的时间起始日
futureTime = DateUtil.beginOfDay(futureTime);
//原始日期+ (延长的分钟除工作时间---->计算多少天+ 1)后的时间起始日后的9小时
futureTime = DateUtil.offsetHour(futureTime, 9);
//增加时间差值
if (num>0){
//变更后日期= (延 长的分钟除工作时间---->计算多少天+ 1)后的时间起始日后的9小时+延长的分钟数(numMinute) -起长的分钟除工作时间(num)★每天的工作时间
futureTime = DateUtil.offsetMinute(futureTime, numMinute-num*workTimeMinuteEverDay);
}else{
//不足一天不用计算差值
//变吏后日期= ( 延长的分钟除工作时间---->计算多少天+ 1)后的时间起始日后的9小时+延长的分钭数(numMinute)
futureTime = DateUtil.offsetMinute(futureTime, numMinute);
}
}
//小于等于9点
if (currentHour <9) {
if (num>0){
//增加天(算今天)
futureTime = DateUtil.offsetDay(currentTime, num);
futureTime = DateUtil.beginOfDay(futureTime);
}else {
futureTime = DateUtil.beginOfDay(currentTime);
}
futureTime = DateUtil.offsetHour(futureTime, 9);
if (num>0){
futureTime = DateUtil.offsetMinute(futureTime, numMinute-num*workTimeMinuteEverDay);
}else{
//不足一天不用计算差值
futureTime = DateUtil.offsetMinute(futureTime, numMinute);
}
}
if(currentHour >=9&¤tHour<18){
//计算当前时间距离18点还有多少分钟
Date date = DateUtil.beginOfDay(currentTime);
Date eighteenOClock = DateUtil.offsetHour(date, 18);
int timeDiff = (int)DateUtil.between(eighteenOClock, currentTime, DateUnit.MINUTE);
if (num>0){
//减去当天的有效时间
int numExceptToday=numMinute-timeDiff;
int num2=numExceptToday/workTimeMinuteEverDay;
//增加天(不算今天)
futureTime = DateUtil.offsetDay(currentTime, num2+1);
futureTime = DateUtil.beginOfDay(futureTime);
futureTime = DateUtil.offsetHour(futureTime, 9);
if (num2>0){
//计算差
futureTime = DateUtil.offsetMinute(futureTime, numExceptToday-num2*workTimeMinuteEverDay);
}else {
//计算差
futureTime = DateUtil.offsetMinute(futureTime, numExceptToday);
}
}else {
//偏移时间正好在当天工作时间内
if (numMinute<=timeDiff){
//直接获取多少分钟后的时间
futureTime = DateUtil.offsetMinute(currentTime, numMinute);
}else {
//偏移时间延后第二天9点开始计算
//增加天(不算今天)
futureTime = DateUtil.offsetDay(currentTime, 1);
futureTime = DateUtil.beginOfDay(futureTime);
futureTime = DateUtil.offsetHour(futureTime, 9);
futureTime = DateUtil.offsetMinute(futureTime, numMinute-timeDiff);
}
}
}
System.out.println(numMinute+"分钟后的时间是:" + DateUtil.formatDateTime(futureTime));
return futureTime;
}