上一篇
Java计算时间差获取小时分钟
- 后端开发
- 2025-06-10
- 3477
在Java中处理时间相减(小时和分钟),可以使用
LocalTime和
Duration类,先将时间字符串解析为
LocalTime对象,用
Duration.between(start, end)计算差值,最后转换为小时和分钟,注意跨天情况需额外处理。
方法1:基础数学计算法(兼容所有Java版本)
通过字符串分割获取小时和分钟,转换为总分钟数后相减:

public class TimeDifferenceCalculator {
public static void main(String[] args) {
String startTime = "08:30"; // 格式:HH:mm
String endTime = "13:45";
// 分割时间字符串
String[] startParts = startTime.split(":");
String[] endParts = endTime.split(":");
// 转换为分钟总数
int startMinutes = Integer.parseInt(startParts[0]) * 60 + Integer.parseInt(startParts[1]);
int endMinutes = Integer.parseInt(endParts[0]) * 60 + Integer.parseInt(endParts[1]);
// 计算分钟差值
int totalDiffMinutes = endMinutes - startMinutes;
// 转换为小时和分钟
int hours = totalDiffMinutes / 60;
int minutes = totalDiffMinutes % 60;
System.out.println("时间差: " + hours + "小时 " + minutes + "分钟");
// 输出:时间差: 5小时 15分钟
}
}
关键点说明
- 字符串分割:用
split(":")分离小时和分钟。 - 分钟转换:将时间统一为分钟数(如
08:30= 8×60 + 30 = 510分钟)。 - 差值计算:直接相减得到总分钟差。
- 单位转换:通过
/60和%60转回小时和分钟。
方法2:Java 8的Time API(推荐,自动处理跨天)
使用 LocalTime 和 Duration 类,精准处理24小时制时间差:
import java.time.Duration;
import java.time.LocalTime;
public class TimeDifferenceCalculator {
public static void main(String[] args) {
String startTime = "23:30"; // 跨天示例
String endTime = "01:15";
// 解析时间字符串
LocalTime start = LocalTime.parse(startTime);
LocalTime end = LocalTime.parse(endTime);
// 处理跨天情况(结束时间小于开始时间时加24小时)
if (end.isBefore(start)) {
end = end.plusHours(24); // 跨天修正
}
// 计算时间差
Duration duration = Duration.between(start, end);
long hours = duration.toHours();
long minutes = duration.toMinutes() % 60;
System.out.println("时间差: " + hours + "小时 " + minutes + "分钟");
// 输出:时间差: 1小时 45分钟
}
}
优势解析
- 自动跨天处理:通过
end.isBefore(start)检测跨天,并修正结束时间。 - 精确计算:
Duration类提供精准的时间差计算,避免手动计算错误。 - 代码简洁:无需手动分割字符串或转换单位。
常见问题处理
- 负数结果(方法1):
// 在计算totalDiffMinutes后添加绝对值转换 totalDiffMinutes = Math.abs(totalDiffMinutes); // 取正值
- 时间格式验证:
使用正则表达式确保输入格式正确:
if (!timeString.matches("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$")) { throw new IllegalArgumentException("时间格式无效!"); }
| 方法 | 适用场景 | 优势 |
|---|---|---|
| 基础数学计算法 | 旧版Java项目 | 无需依赖新API |
| Java 8 Time API | 新版Java、跨天场景 | 自动处理复杂逻辑,代码更健壮 |
最佳实践:

- 优先使用 Java 8的
LocalTime和Duration(方法2),尤其需处理跨天场景时。 - 若环境限制(如Android旧版本),选择基础数学法(方法1),但需自行处理边界情况。
引用说明:本文代码基于Oracle官方Java文档中LocalTime和Duration类的标准用法实现,确保权威性和可复用性。
