You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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"));
}

代码说明

  1. 累加逻辑:对每个LocalTime,把小时单位转换为分钟(getHour() * 60),加上当前的分钟数,得到该时间的总分钟数,再累加到totalMinutes变量中。
  2. 结果输出:
    • 如果只需要纯数字的总分钟数,直接返回Long.toString(totalMinutes)即可;
    • 如果需要保持类似"00:00"的时间格式,就用总分钟数反向计算小时和分钟,生成LocalTime后再格式化。
  3. 空列表处理:当workHours为空时,totalMinutes保持0,格式化后自动返回"00:00",符合你原代码的预期。

举个实际例子:如果有两条午餐时间数据——00:30:00和01:15:00,总分钟数就是30 + 75 = 105,格式化后会返回"01:45"。

内容的提问来源于stack exchange,提问作者anduplats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:12:37