如何在Java中遍历LocalTime累加分钟数?现有代码无法正确获取分钟
在Java中累加LocalTime的分钟数并返回总分钟数
我看你现在的代码逻辑存在几个关键问题,导致没法正确计算累加的总分钟数,我来帮你梳理和修正:
原代码的问题分析
- 没有实现累加逻辑:你在循环里只是把当前
lunchTime的分钟数加到自身(lunchTime.plusMinutes(lunchTime.getMinute())),然后不断覆盖plusMinutes变量,最后只取了最后一条数据的结果,完全没有做求和操作。 - 变量与返回逻辑偏差:
plusMinutes初始为null,即便有数据时会被赋值,但逻辑完全偏离了“累加总分钟数”的需求;空列表时返回"00:00",但非空时返回的是单个时间的分钟数,不是总和。
修正后的代码
我们要做的核心是遍历每个午餐时间,提取它的总分钟数并累加,最后按需返回结果:
public String userLunchHoursSum(String username) { List<WorkHour> workHours = workHourRepository.findWorkHoursByUsername(username); // 初始化总分钟数为0 long totalMinutes = 0; for (WorkHour workHour : workHours) { // 将sql.Time类型转换为LocalTime LocalTime lunchTime = workHour.getLunch_time().toLocalTime(); // 计算当前午餐时间的总分钟数(小时转分钟 + 分钟数)并累加 totalMinutes += lunchTime.getHour() * 60 + lunchTime.getMinute(); } // 两种返回方式可选: // 1. 直接返回总分钟数字符串 // return Long.toString(totalMinutes); // 2. 格式化为HH:mm的时间字符串(和你原代码返回格式一致) LocalTime totalLunchTime = LocalTime.of((int) (totalMinutes / 60), (int) (totalMinutes % 60)); return totalLunchTime.format(DateTimeFormatter.ofPattern("HH:mm")); }
代码说明
- 累加逻辑:对每个
LocalTime,把小时单位转换为分钟(getHour() * 60),加上当前的分钟数,得到该时间的总分钟数,再累加到totalMinutes变量中。 - 结果输出:
- 如果只需要纯数字的总分钟数,直接返回
Long.toString(totalMinutes)即可; - 如果需要保持类似"00:00"的时间格式,就用总分钟数反向计算小时和分钟,生成
LocalTime后再格式化。
- 如果只需要纯数字的总分钟数,直接返回
- 空列表处理:当
workHours为空时,totalMinutes保持0,格式化后自动返回"00:00",符合你原代码的预期。
举个实际例子:如果有两条午餐时间数据——00:30:00和01:15:00,总分钟数就是30 + 75 = 105,格式化后会返回"01:45"。
内容的提问来源于stack exchange,提问作者anduplats
相关产品推荐
相关产品推荐

