cecilia/src/main/java/com/darkness/common/util/DateTimeUtils.java
2024-12-24 15:22:53 +08:00

102 lines
3.8 KiB
Java

package com.darkness.common.util;
import lombok.Data;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
public class DateTimeUtils {
/**
* 计算两个日期之间相差的天数
* @param smdate 开始时间
* @param bdate 结束时间
*/
public static int daysBetween(Date smdate, Date bdate) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdf.parse(sdf.format(smdate));
bdate=sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 计算临期/超期天数
* 临期 包括今天
* 超期 不包括今天
* @param endDate 截至时间
* @param finishDate 完成时间
*/
public static TimeOverdueAdventPojo overdueAdvent(Date endDate, Date finishDate) throws ParseException {
TimeOverdueAdventPojo timeOverdueAdventPojo = new TimeOverdueAdventPojo();
SimpleDateFormat sdf_YMD2359 = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
SimpleDateFormat sdf_YMDHMS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf_YMD = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf_YMD2359.format(endDate);
//当前时间
Date nowTime = new Date(Timestamp.from(Instant.now()).getTime());
Date endTime = new Date(sdf_YMD.parse(format).getTime());
Date endTime_flag = new Date(sdf_YMDHMS.parse(format).getTime());
Calendar cal = Calendar.getInstance();
cal.setTime(endTime);
long timeEnd = cal.getTimeInMillis();
cal.setTime(nowTime);
long timeNow = cal.getTimeInMillis();
if (Objects.isNull(finishDate)){
if (nowTime.after(endTime_flag)){
long between_days = (timeEnd - timeNow) / (1000 * 3600 * 24);
timeOverdueAdventPojo.setFlag((byte) 1);
timeOverdueAdventPojo.setOaFlag("逾期");
timeOverdueAdventPojo.setDays(Integer.parseInt(String.valueOf(between_days)));
}else {
long between_days = (endTime_flag.getTime() - nowTime.getTime()) / (1000 * 3600 * 24);
timeOverdueAdventPojo.setFlag((byte) 0);
timeOverdueAdventPojo.setOaFlag("临期");
timeOverdueAdventPojo.setDays(Integer.parseInt(String.valueOf(between_days + 1)));
}
}else {
Date finishTime = new Date(finishDate.getTime());
cal.setTime(finishTime);
long timeFinish = cal.getTimeInMillis();
if (finishDate.after(endTime_flag)){
long between_days = (timeEnd - timeFinish) / (1000 * 3600 * 24);
timeOverdueAdventPojo.setFlag((byte) 1);
timeOverdueAdventPojo.setOaFlag("逾期");
timeOverdueAdventPojo.setDays(Integer.parseInt(String.valueOf(between_days)));
}else {
long between_days = (endTime_flag.getTime() - timeFinish) / (1000 * 3600 * 24);
timeOverdueAdventPojo.setFlag((byte) 0);
timeOverdueAdventPojo.setOaFlag("临期");
timeOverdueAdventPojo.setDays(Integer.parseInt(String.valueOf(between_days + 1)));
}
}
return timeOverdueAdventPojo;
}
@Data
public static class TimeOverdueAdventPojo {
private int days;
private byte flag; //未逾期 0 逾期 1
private String oaFlag; //临期 advent 逾期 overdue
}
}