1、写法

//静态方法,传入年月日时分秒
LocalDateTime startTime = LocalDateTime.of(2023, 11, 22, 15, 09, 59);
LocalDateTime endTime = LocalDateTime.of(2023, 11, 30, 0, 0, 0);
//计算差值
Duration duration = Duration.between(startTime, endTime);
//差几天
long days = duration.toDays();
//差多少小时
long hours = duration.toHours();
//分钟
long minutes = duration.toMinutes();
//秒
long seconds = duration.toSeconds();
//毫秒
long millis = duration.toMillis();
//纳秒
long nanos = duration.toNanos();

注意:

  • 上面的toHours()方法返回的是时间差全部换算为小时的数值,而不时去掉整天以后的整小时,想获得后者,应该调用toHoursPart()方法
  • 计算结果可能为负值

PS:上面用到的LocalDateTime的of方法源码:

Java计算时间差,距结束还有几天几小时几分钟-LMLPHP

2、备份

备份下需求里写的一部分代码,以后好直接copy。需求部分UI:

Java计算时间差,距结束还有几天几小时几分钟-LMLPHP

该字段的后端处理:

/**
 * 计算时间差
 * 传入LocalDate,即年月日
 * 返回距离当前还有几天几小时几分钟
 * 结果为负数时,返回已过期
*/
public static String calcTimeliness(LocalDate timeliness) {
	//年月日转年月日0时0分0秒
	LocalDateTime timeDeadLine = timeliness.atTime(0, 0, 0);
	//起始时间
	LocalDateTime now = LocalDateTime.now();
	Duration duration = Duration.between(now, timeDeadLine);
	long days = duration.toDays();
	int hours = duration.toHoursPart();
	long minutes = duration.toMinutesPart();
	if (days < 0 || hours < 0 || minutes < 0) {
	    return StatusEnum.EXPIRED.getName();  //已过期
	}
	return days + "天" + hours + "小时" + minutes + "分";

}

3、LocalDate、LocalDateTime、Date、String互转

用的时候查吧,整理也没用,记不住也不用记。

11-24 21:10