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

使用Joda Time计算时间差时无法获取正确小时和分钟的问题

解决Joda Time计算时间差的小时和分钟问题

嘿,我来帮你搞定这个时间计算的小坑!你遇到的问题根源在于用错了API——Hours.hoursBetween()只会返回两个时间之间的完整小时数,而你给出的两个时间差是48分28秒,所以得到的hours是0,这显然不是你想要的结果。下面给你两种靠谱的解决办法:

方法一:用Period类直接获取小时和分钟差值

这个方法会直接给出两个时间之间的小时、分钟等各单位的差值,非常直观:

import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class Testdate_time {
    public void testdate() {
        String in_time = "2018 May 07 09:20:01 AM";
        String out_time = "2018 May 07 10:08:29 AM";
        
        // 初始化格式化器,建议指定时区避免系统时区差异导致的问题
        DateTimeFormatter format = DateTimeFormat.forPattern("yyyy MMM dd hh:mm:ss a")
                .withZoneUTC();
        
        DateTime date1 = format.parseDateTime(in_time);
        DateTime date2 = format.parseDateTime(out_time);
        
        // 生成包含所有时间单位的周期对象
        Period period = new Period(date1, date2);
        int hours = period.getHours();
        int minutes = period.getMinutes();
        
        System.out.println("时间差:" + hours + "小时" + minutes + "分钟");
        // 输出结果:时间差:0小时48分钟
    }
}

方法二:计算总分钟数后拆分

如果你需要的是把总时长拆成小时和分钟(比如把100分钟拆成1小时40分钟),可以先算总分钟数再拆分:

// 承接上面的date1和date2初始化代码
int totalMinutes = org.joda.time.Minutes.minutesBetween(date1, date2).getMinutes();
int hours = totalMinutes / 60;
int minutes = totalMinutes % 60;

System.out.println("总时长:" + hours + "小时" + minutes + "分钟");
// 同样输出:总时长:0小时48分钟

几个关键提醒

  • 别再只用Hours.hoursBetween()啦,它只统计完整的小时数,会直接忽略分钟和秒的部分;
  • 解析时间时一定要指定时区(比如示例里的withZoneUTC()),否则不同系统时区可能会导致时间解析出错;
  • 你原代码里的replaceAll("..."根本没必要,用Joda Time的API就能直接拿到正确的数值,不用折腾字符串替换~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:09:10