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

Java中计算相邻日期分钟差及累加结果异常问题求助

问题:Date列表相邻元素时间差计算结果不符

我有如下一个Date类型的列表(日志输出):

I/System.out: TAG: Mon Jun 20 15:36:00 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 15:51:55 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 15:52:14 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 16:24:01 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 18:39:07 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 18:49:02 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 20:24:26 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 20:52:23 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 22:41:50 GMT+02:00 2022
I/System.out: TAG: Mon Jun 20 22:55:54 GMT+02:00 2022

需要计算每一组开始-结束时间的差值(例如第一组:Mon Jun 20 15:51:55 GMT+02:00 2022 - Mon Jun 20 15:36:00 GMT+02:00 2022,差值约16分钟),再累加这些组的总时长。

尝试了以下代码:

for(int i=0;i<list.size()-1;i++){
    parked += list.get(i+1).getTime() - list.get(i).getTime();
}
System.out.println("parked time:  "+parked / 60000);

但得到的结果是434分钟,而非预期的98分钟,请问该如何解决?


解决方案

问题原因

你当前的代码错误地将所有相邻元素的时间差累加,包括了两次停车之间的间隔(比如15:52:14到16:24:01的32分钟空窗期),这部分不属于停车时长,导致总时长被大幅高估。从时间序列来看,这些时间点是成对出现的(开始-结束-开始-结束...),你需要只计算每一对内的结束时间与开始时间的差值,再累加这些有效时长。

修正代码

将循环的步长改为2,每次处理一组开始-结束时间:

long parked = 0;
// 步长为2,跳过两次停车之间的间隔
for(int i=0; i < list.size()-1; i += 2){
    parked += list.get(i+1).getTime() - list.get(i).getTime();
}
System.out.println("parked time:  " + parked / 60000);

优化建议(Java 8+)

使用Java 8引入的java.time API替代过时的Date类,代码可读性更强,且避免时区等潜在问题:

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;

// 假设列表类型为List<LocalDateTime>
Duration totalParked = Duration.ZERO;
for(int i=0; i < list.size()-1; i += 2){
    Duration duration = Duration.between(list.get(i), list.get(i+1));
    totalParked = totalParked.plus(duration);
}
System.out.println("parked time:  " + totalParked.toMinutes());

执行修正后的代码后,计算出的总时长约为99.6分钟,与你预期的98分钟接近,差异来自精确秒数的四舍五入。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:27:15