本公司业务
给定数据创建时间
默认每天都是工作日,设定工作时间
设置一定的时间,过了设定时间为超时时间为负
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class SurplusTimeLengthUtils {
private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private SurplusTimeLengthUtils(){}
//当前是否工作时间
public static Boolean isWorkTime(String workStartTime, String workEndTime){
LocalDateTime startTimeRedu=getWorkTime(workStartTime,LocalDateTime.now());
LocalDateTime endTimeRedu=getWorkTime(workEndTime,LocalDateTime.now());
if(LocalDateTime.now().isBefore(startTimeRedu)&&LocalDateTime.now().isAfter(endTimeRedu)){
return true;
}
return false;
}
//设置工作开始时间
public static LocalDateTime getWorkTime(String workTime,LocalDateTime time){
int workTimeHour=Integer.valueOf(workTime.split(":")[0]);
int workTimeMinute=Integer.valueOf(workTime.split(":")[1]);
LocalDateTime workTimeTimeRedu=time.withHour(workTimeHour).withMinute(workTimeMinute);
return workTimeTimeRedu;
}
//获取剩余时间
public static Long getSurplusTime(LocalDateTime createTime, String workStartTime, String workEndTime){
LocalDateTime nowDateTime=LocalDateTime.now().withSecond(0);
LocalDateTime workStartDateNow=getWorkTime(workStartTime,nowDateTime);
LocalDateTime workEndDateNow=getWorkTime(workEndTime,nowDateTime);
//判断是否是今天
if(dtf.format(createTime).equalsIgnoreCase(dtf.format(nowDateTime))){
return getWorkNowTime(createTime,workStartDateNow,workEndDateNow,nowDateTime);
}else{
long days=nowDateTime.toLocalDate().toEpochDay()-createTime.toLocalDate().toEpochDay();
Long minute=getCreateDateTimeLength(createTime,workStartDateNow,workEndDateNow);
long nowTimeLength = getNowDateTimeLength(workStartDateNow,workEndDateNow,nowDateTime);
Duration oneDayLength = java.time.Duration.between(workStartDateNow, workEndDateNow);
minute=minute+(days-1)*oneDayLength.toMinutes();
minute+=nowTimeLength;
return minute;
}
}
//获取剩余时间
public static Long getSurplusTime(LocalDateTime createTime, LocalDateTime workStartDateNow, LocalDateTime workEndDateNow){
LocalDateTime nowDateTime=LocalDateTime.now().withSecond(0);
//判断是否是今天
if(dtf.format(createTime).equalsIgnoreCase(dtf.format(nowDateTime))){
return getWorkNowTime(createTime,workStartDateNow,workEndDateNow,nowDateTime);
}else{
long days=nowDateTime.toLocalDate().toEpochDay()-createTime.toLocalDate().toEpochDay();
Long minute=getCreateDateTimeLength(createTime,workStartDateNow,workEndDateNow);
long nowTimeLength = getNowDateTimeLength(workStartDateNow,workEndDateNow,nowDateTime);
Duration oneDayLength = java.time.Duration.between(workStartDateNow, workEndDateNow);
minute=minute+(days-1)*oneDayLength.toMinutes();
minute+=nowTimeLength;
return minute;
}
}
//获取创建时间和现在是同一天的时间
public static Long getWorkNowTime(LocalDateTime createTime, LocalDateTime workStartTime, LocalDateTime workEndTime,LocalDateTime nowDateTime){
//现在为上班前
if(nowDateTime.isBefore(workStartTime)){
return 0L;
}
//下班后创建
if(createTime.isAfter(workEndTime)){
return 0L;
}
//上班时间
if(nowDateTime.isBefore(workEndTime)){
//创建时间在上班前
if(createTime.isBefore(workStartTime)){
return Duration.between(workStartTime,nowDateTime).toMinutes();
}else{
return Duration.between(createTime,nowDateTime).toMinutes();
}
//下班之后
}else{
if(createTime.isBefore(workStartTime)){
//创建时间在上班前
return Duration.between(workStartTime,workEndTime).toMinutes();
}else if(createTime.isBefore(workEndTime)){
//创建时间在下班前
return Duration.between(createTime,workEndTime).toMinutes();
}else{
//下班后创建
return 0L;
}
}
}
//跨天获取创建当天的时长
public static Long getCreateDateTimeLength(LocalDateTime createTime, LocalDateTime workStartTime, LocalDateTime workEndTime){
workStartTime=createTime.withHour(workStartTime.getHour()).withMinute(workStartTime.getMinute());
workEndTime=createTime.withHour(workEndTime.getHour()).withMinute(workEndTime.getMinute());
if(createTime.isBefore(workStartTime)){
return java.time.Duration.between(workStartTime,workEndTime).toMinutes();
}
if(createTime.isBefore(workEndTime)){
return Duration.between(createTime, workEndTime).toMinutes();
}else {
return 0L;
}
}
//跨天现在的时长
public static Long getNowDateTimeLength(LocalDateTime workStartTime, LocalDateTime workEndTime,LocalDateTime nowDateTime){
//现在是上班前
if(nowDateTime.isBefore(workStartTime)){
return 0L;
}
//现在是上班时间
if(nowDateTime.isBefore(workEndTime)){
return Duration.between(workStartTime,nowDateTime).toMinutes();
}else{
//下班时间
return Duration.between(workStartTime,workEndTime).toMinutes();
}
}
//获取剩余时间
public static Long getSurplusTimeLength(LocalDateTime createTime, Integer timeLength, String workStartTime, String workEndTime){
LocalDateTime nowDateTime=LocalDateTime.now().withSecond(0);
LocalDateTime workStartDateNow=getWorkTime(workStartTime,nowDateTime);
LocalDateTime workEndDateNow=getWorkTime(workEndTime,nowDateTime);
//判断是否是今天
if(dtf.format(createTime).equalsIgnoreCase(dtf.format(nowDateTime))){
return timeLength-getWorkNowTime(createTime,workStartDateNow,workEndDateNow,nowDateTime);
}else{
long days=java.time.Duration.between(createTime,nowDateTime).toDays();
Long minute=getCreateDateTimeLength(createTime,workStartDateNow,workEndDateNow);
Duration nowTimeLength = java.time.Duration.between(workStartDateNow, nowDateTime);
Duration oneDayLength = java.time.Duration.between(workStartDateNow, workEndDateNow);
minute=minute+days*oneDayLength.toMinutes();
minute+=nowTimeLength.toMinutes();
return timeLength-minute;
}
}
public static String getSurplusTimeFormat(LocalDateTime createTime, Integer timeLength, String workStartTime, String workEndTime){
createTime=createTime.withSecond(00);
LocalDateTime nowDateTime=LocalDateTime.now().withSecond(00);
LocalDateTime workStartDateNow=getWorkTime(workStartTime,nowDateTime);
LocalDateTime workEndDateNow=getWorkTime(workEndTime,nowDateTime);
Long minuter=getSurplusTime(createTime,workStartDateNow,workEndDateNow);
Long surplusTime=timeLength-minuter;
StringBuilder sb=new StringBuilder();
if(surplusTime<0){
sb.append("-");
}
if(Math.abs(surplusTime/60)<10){
sb.append("0");
}
sb.append(Math.abs(surplusTime/60)).append(":");
if(Math.abs(surplusTime%60)<10){
sb.append("0");
}
sb.append(Math.abs(surplusTime%60));
return sb.toString();
}
public static void main(String[] args) {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime createTime=LocalDateTime.parse("2021-04-12 11:46:40",df);
//50为设定的超时时间,超过为负
//11:15为上班时间
//20:42为下班时间
//默认每天都是工作日,只是有工作时间限制
System.out.println(getSurplusTimeFormat(createTime,50,"11:15","20:42"));
}
}