使用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
相关产品推荐
相关产品推荐

