1. 计算小时差
public static final Long ONE_HOUR_TIME_LONG = 60 * 60 * 1000L;
@Test
public void hours() throws ParseException {
Date date1 = new Date();
// org.apache.commons.lang3.time.DateUtils;
Date date2 = DateUtils.parseDate("2024-01-24 18:35:00", "yyyy-MM-dd HH:mm:ss");
long times = date1.getTime() - date2.getTime();
double hours = times / (ONE_HOUR_TIME_LONG * 1.0);
Double divide = divide(times, ONE_HOUR_TIME_LONG, 2);
System.out.println(hours + ", " + divide);
}
/**
* 除法运算
*
* @param dividend 被除数,分子
* @param divisor 除数,分母
* @param scale 精度,小数位
*/
public static Double divide(Long dividend, Long divisor, Integer scale) {
if (dividend == null || divisor == null || divisor == 0L) {
return 0D;
}
BigDecimal b1 = BigDecimal.valueOf(dividend);
BigDecimal b2 = BigDecimal.valueOf(divisor);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
1.2 百分数
System.out.println("percent: " + toPercent(1.234));
public static String toPercent(Double value) {
DecimalFormat decimalFormat = new DecimalFormat("##%");
return decimalFormat.format(value);
}
2. 计算时间差
@Test
public void duration() throws ParseException {
Date date1 = new Date();
Date date2 = DateUtils.parseDate("2024-01-23 18:35:00", "yyyy-MM-dd HH:mm:ss");
long times = date1.getTime() - date2.getTime();
long day = times / (24 * 60 * 60 * 1000);
long hour = (times / (60 * 60 * 1000) - day * 24);
long min = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60);
long s = (times / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
System.out.println(day + "天" + hour + "小时" + min + "分" + s + "秒");
}
打印结果:
1天1小时11分14秒
3. 计算日期
@Test
public void beforeDate() {
String before = DateUtil.beforeDate("2024-01-23", "2024-01-25");
System.out.println(before);
}
public class DateUtil {
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/**
* 调用示例:DateUtil.beforeDate("2024-01-23", "2024-01-25")
*/
public static String beforeDate(String dateStartStr, String dateEndStr) {
Date date = parseDateBefore(dateStartStr, dateEndStr);
return parseDate(date);
}
public static Date parseDateBefore(String dateStartStr, String dateEndStr) {
try {
Date dateStart = DateUtils.parseDate(dateStartStr, DEFAULT_DATE_FORMAT);
Date dateEnd = DateUtils.parseDate(dateEndStr, DEFAULT_DATE_FORMAT);
long times = dateEnd.getTime() - dateStart.getTime();
Date beforeDate = new Date(dateStart.getTime() - times);
return beforeDate;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
public static String parseDate(Date date) {
return parseDateByFormat(date, DEFAULT_DATE_FORMAT);
}
private static String parseDateByFormat(Date date, String dateFormat) {
if (date == null) {
return null;
}
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
return format.format(date);
}
}
网友评论