计算工具类:
package com.test.common.utils;import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;import java.time.Duration;
import java.util.Date;
import java.util.Objects;/*** 计算工具类*/
@Component
public class CalculationUtils {/*** 天毫秒数*/private final long dayMillis = Duration.ofDays(1).toMillis();/*** 小时毫秒数*/private final long hourMillis = Duration.ofHours(1).toMillis();/*** 分钟毫秒数*/private final long minuteMillis = Duration.ofMinutes(1).toMillis();/*** 秒毫秒数*/private final long secondMillis = Duration.ofSeconds(1).toMillis();public String calcDuration(@NonNull Date start, Date end,String... args) {if(args.length == 0){return this.calcDurationSecond(start,end);}else if("1".equals(args[0])){return this.calcDurationMinute(start,end);}return "0";}/*** 计算时长:精确到分* @param start* @param end*/public String calcDurationMinute(@NonNull Date start, Date end) {Date endDate = Objects.nonNull(end) ? end : new Date();// 差额long diff = endDate.getTime() - start.getTime();// 天数long days = diff / dayMillis;// 小时long hours = diff % dayMillis / hourMillis;// 分钟long minutes = diff % dayMillis % hourMillis / minuteMillis;if (diff > dayMillis) {// 大于24小时return String.format("%s天%s小时%s分钟", days, hours, minutes);} else if (diff < hourMillis) {// 小于1小时return String.format("%s分钟", minutes);} else {return String.format("%s小时%s分钟", hours, minutes);}}/*** 计算时长:精确到秒* @param start* @param end*/public String calcDurationSecond(@NonNull Date start, Date end) {Date endDate = Objects.nonNull(end) ? end : new Date();// 差额long diff = endDate.getTime() - start.getTime();// 天数long days = diff / dayMillis;// 小时long hours = diff % dayMillis / hourMillis;// 分钟long minutes = diff % dayMillis % hourMillis / minuteMillis;// 秒long seconds = diff % dayMillis % hourMillis % minuteMillis / secondMillis;if (diff > dayMillis) {// 大于24小时return String.format("%s天%s小时%s分钟%s秒", days, hours, minutes, seconds);} else if (diff > hourMillis) {// 小于1小时return String.format("%s小时%s分钟%s秒", hours, minutes, seconds);} else if (diff > minuteMillis) {// 小于1分钟return String.format("%s分钟%s秒", minutes, seconds);} else {return String.format("%s秒", seconds);}}}