Android中如何计算hh:mm:ss.SSS格式时间的精确毫秒差值
hh:mm:ss.SSS格式时间的精确毫秒差值计算方法
核心实现逻辑
不需要手动拆分时间字符串做单位换算,只需要把字符串格式的时间解析为带毫秒精度的时间对象,直接取两个对象的毫秒时间戳做差即可,计算过程无精度损失。
容易踩的实现坑
- 格式占位符选错:原代码使用的
hh是12小时制占位符,只要计算的时间涉及12点前后的区间,就会因为上下午识别错误导致差值偏差,精准计算场景必须换成24小时制的HH作为小时占位符 - 精度丢失:不要手动拆分字符串把时、分、秒、毫秒拼起来算差值,很容易出现单位换算错误,直接用
Date对象自带的毫秒时间戳计算,从根源上避免这类问题 - 多余的类型转换:不需要反复在字符串和时间对象之间来回转换,只要解析环节的格式规则匹配,就能直接拿到带毫秒精度的时间值
完整可运行代码示例
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class TimeDiff { public static void main(String[] args) throws Exception { String Y1 = "05:41:54.771"; String Y2 = "05:42:03.465"; // 格式串替换为24小时制的HH,匹配毫秒精度需求 SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault()); // 解析时间字符串为Date对象 Date time1 = format.parse(Y1); Date time2 = format.parse(Y2); // 计算毫秒差值,取绝对值避免时间先后顺序影响结果 long diffMills = Math.abs(time2.getTime() - time1.getTime()); System.out.println("两个时间的精确毫秒差值为:" + diffMills); } }
代码运行说明:上述代码会自动匹配给出的格式规则计算差值,最终输出的结果完全保留毫秒级精度,不会出现秒/分换算的精度丢失。
针对原有代码的补全说明
贴出的半截代码缺少两个核心环节:
- 缺少
format.parse(时间字符串)的解析步骤,没有把格式化规则和实际的时间值绑定 - 缺少差值计算环节,没有取出两个时间对象的毫秒时间戳做减法
内容的提问来源于stack exchange,提问作者Satyam Raikwar
相关产品推荐
相关产品推荐

