package com.lrhealth.mappingintegration.utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.Objects;
/**
* ClassName: TimeUtil
* Description:计算时间差
*
* @author pangyq
* date: 2022/2/7 15:45
*/
@Component
public class TimeUtil {
private static final String LOCAL_DATATIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 计算两个时间差值并转换为时分秒 例如: 2021-11-05 09:53:05和2021-11-05 09:53:08 返回结果为3秒
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return 时间差值
*/
public static String getTimeTnterval(Date startTime, Date endTime) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String start = formatter.format(startTime);
String end = formatter.format(endTime);
if (Objects.isNull(start) || Objects.isNull(end)) {
return null;
}
return getTimeTnterval(parseStringToDateTime(start), parseStringToDateTime(end));
}
/**
* 计算两个时间差值并转换为时分秒 例如: 2021-11-05 09:53:05和2021-11-05 09:53:08 返回结果为3秒
*
* @param start 开始时间
* @param end 结束时间
* @return 时间差值
*/
public static String getTimeTnterval(LocalDateTime start, LocalDateTime end) {
if (Objects.isNull(start) || Objects.isNull(end)) {
return null;
}
StringBuilder builder = new StringBuilder();
LocalDateTime tempDateTime = LocalDateTime.from(start);
long year = tempDateTime.until(end, ChronoUnit.YEARS);
if (year != 0) {
builder.append(year).append("year");
}
long month = tempDateTime.until(end, ChronoUnit.MONTHS);
if (month != 0) {
builder.append(month).append("month");
}
tempDateTime = tempDateTime.plusMonths(month);
long days = tempDateTime.until(end, ChronoUnit.DAYS);
if (days != 0) {
builder.append(days).append("day");
}
tempDateTime = tempDateTime.plusDays(days);
long hours = tempDateTime.until(end, ChronoUnit.HOURS);
if (hours != 0) {
builder.append(hours).append("h");
}
tempDateTime = tempDateTime.plusHours(hours);
long minutes = tempDateTime.until(end, ChronoUnit.MINUTES);
if (minutes != 0) {
builder.append(minutes).append("min");
}
tempDateTime = tempDateTime.plusMinutes(minutes);
long seconds = tempDateTime.until(end, ChronoUnit.SECONDS);
if (seconds != 0) {
builder.append(seconds).append("s");
}
if (StringUtils.isEmpty(builder.toString())){
builder.append("0s");
}
return builder.toString();
}
/**
* 将指定时间字符串转换为LocalDateTime
*
* @param time 待转换时间字符串
* @return 转换结果
*/
public static LocalDateTime parseStringToDateTime(String time) {
return LocalDateTime.parse(time, DateTimeFormatter.ofPattern(LOCAL_DATATIME_FORMAT));
}
}