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

Java中如何基于时分值计算本地时间差返回小数形式时长

Java字符串时间差计算返回小数小时方案

问题场景

Java开发中进行时间差计算时,实体类内的departureTime(出发时间)、arriveTime(到达时间)字段均定义为string类型,调用自定义calculateDuration方法计算二者时间差时,仅能返回整数结果。
测试入参如下:

"departureTime": "9:00",
"arriveTime": "11:30"

预期返回时长结果为2.5,当前方法实际返回整数2,不符合需求。
当前存在问题的代码片段:

private long calculateDuration()
{

   final LocalDateTime departureDate =
   LocalDateTime.of(0, 1, 1, getHours(departureTime), getMinutes(departureTime));
        
   final LocalDateTime arrivalDate =
   LocalDateTime.of(0, 1, 1, getHours(arriveTime), getMinutes(arriveTime));

   return Duration.between(departureDate, arrivalDate).toHours();
}

private int getHours(final String time) {
    return Integer.parseInt(time.split(":")[0]);
}

private int getMinutes(final String time) {
    return Integer.parseInt(time.split(":")[1]);
}

问题根因

当前代码调用Duration.between().toHours()方法时,该方法会将时间差直接截断取整为小时单位,自动丢弃不足1小时的分钟/秒部分,因此2小时30分钟的差值会被截断返回2,丢失了30分钟对应的0.5小时部分。
同时方法返回值定义为long类型,本身也不支持返回小数结果。

修正方案

  • 将方法返回值类型从long修改为double,支持小数格式的时长返回
  • 不直接使用toHours()取整,改为先计算两个时间的总分钟数,除以60.0得到带小数的小时结果(注意除数必须写为60.0,如果写整数60会触发整数除法,依然返回整数结果)

修正后的完整代码:

// 返回值改为double类型支持小数
private double calculateDuration()
{
   final LocalDateTime departureDate =
   LocalDateTime.of(0, 1, 1, getHours(departureTime), getMinutes(departureTime));
        
   final LocalDateTime arrivalDate =
   LocalDateTime.of(0, 1, 1, getHours(arriveTime), getMinutes(arriveTime));

   Duration timeDiff = Duration.between(departureDate, arrivalDate);
   // 总分钟数除以60.0,得到精确的小时差值
   return timeDiff.toMinutes() / 60.0;
}

private int getHours(final String time) {
    return Integer.parseInt(time.split(":")[0]);
}

private int getMinutes(final String time) {
    return Integer.parseInt(time.split(":")[1]);
}

以上代码传入9:00到11:30的参数时,总分钟差为150,150/60.0=2.5,完全符合预期结果。
如果需要支持秒级精度的时长计算,可以将计算逻辑替换为总秒数除以3600.0:

return timeDiff.toSeconds() / 3600.0;

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:42:31