/** * 计算处理用时:此方法可以计算俩个时间值之间 超时多少 节省多少 * 并且去除了周六日俩天 计算 * * @param realEndDate 实际结束时间 * @param taskEndDate 规定结束时间 */
private Map<String, Object> getDurationTime(LocalDateTime realEndDate, LocalDateTime taskEndDate) {
Map<String, Object> result = new HashMap<>(); StringBuilder timeStr = new StringBuilder(); // realEndDate = LocalDateTime.of(2024, 7, 5, 22, 32, 32); // taskEndDate = LocalDateTime.of(2024, 7, 6, 23, 54, 32); Duration duration = Duration.between(realEndDate, taskEndDate); long day = duration.toDays(); long hour = duration.toHours(); long between = ChronoUnit.DAYS.between(taskEndDate, realEndDate); long distanceDays = 0; long sundays = 0; long toDayHour = 24; if (between < 0) { between = Long.parseLong(String.valueOf(between).substring(1)); } for (long l = 0; l < between; l++) { LocalDateTime localDateTime = realEndDate.plusDays(l); int value = localDateTime.getDayOfWeek().getValue(); if (6 == value || 7 == value) { sundays++; continue; } distanceDays++; } if (day > 0 || hour > 0) { if (distanceDays > 0) { long diffHour = 0; if ((day - distanceDays) > 0) { diffHour = (day - distanceDays) * toDayHour; } long toDayHours = distanceDays * toDayHour; long distanceHour = hour - toDayHours - diffHour; if (distanceHour > 0) { result.put("day", distanceDays); result.put("hour", distanceHour); timeStr.append("节省:").append(distanceDays).append("天,").append(distanceHour).append("小时"); } else if (distanceHour == 0) { result.put("day", distanceDays); timeStr.append("节省:").append(distanceDays).append("天"); } else { result.put("hour", hour); timeStr.append("节省:").append(hour).append("小时"); } result.put("bol", true); result.put("timeStr", timeStr); return result; } if (day == 0) { result.put("day", distanceDays); result.put("hour", hour); result.put("bol", true); result.put("timeStr", timeStr.append("节省").append(hour)); return result; } result.put("day", day); result.put("bol", true); timeStr.append("节省:").append(day).append("天"); if (hour > toDayHour) { result.put("hour", hour - toDayHour); timeStr.append(hour - toDayHour).append("小时"); } } else { if (hour < 0) { long timeOutHour = Long.parseLong(String.valueOf(hour).substring(1)); if (day < 0) { long timeOutDay = Long.parseLong(String.valueOf(day).substring(1)); long hourTime = timeOutHour - (timeOutDay * toDayHour); result.put("day", day + sundays); result.put("hour", -hourTime); result.put("bol", false); result.put("timeStr", timeStr.append("超时").append(timeOutDay - sundays).append("天,")); if (hourTime > 0) { timeStr.append(hourTime).append("小时"); } return result; } result.put("day", day); result.put("hour", timeOutHour); result.put("bol", false); result.put("timeStr", timeStr.append("超").append(timeOutHour).append("小时")); return result; } result.put("day", 0); result.put("hour", 0); result.put("bol", true); timeStr.append("刚好未超时"); } result.put("timeStr", timeStr); return result; }