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

如何计算起始日期与另外两个日期的秒级及毫秒级时间差?

计算起始时间到目标时间的秒数+毫秒数

核心思路

System.currentTimeMillis()返回的是从1970年1月1日00:00:00 UTC到当前时间的毫秒数,直接用目标时间戳减去起始时间戳,就能得到两者间经过的毫秒数。再将这个差值转换为「秒数.三位毫秒数」的格式即可。

代码实现方案

方案1:浮点数直接计算(简洁直观)

long firstDate = System.currentTimeMillis();
long secondDate = System.currentTimeMillis();
long thirdDate = System.currentTimeMillis();

// 计算时间差(毫秒)
long diffSecond = secondDate - firstDate;
long diffThird = thirdDate - firstDate;

// 转换为秒+毫秒的小数形式
double elapsedSecond = diffSecond / 1000.0;
double elapsedThird = diffThird / 1000.0;

// 格式化输出为固定三位小数,匹配示例格式
System.out.printf("firstDate = 0.000%n");
System.out.printf("secondDate= %.3f%n", elapsedSecond);
System.out.printf("thirdDate = %.3f%n", elapsedThird);

方案2:拆分秒和毫秒(避免浮点数精度问题)

如果担心浮点数精度误差,可以直接拆分整数秒和剩余毫秒,再拼接成字符串:

long firstDate = System.currentTimeMillis();
long secondDate = System.currentTimeMillis();
long thirdDate = System.currentTimeMillis();

// 计算时间差(毫秒)
long diffSecond = secondDate - firstDate;
long diffThird = thirdDate - firstDate;

// 拆分秒和毫秒
long secSecond = diffSecond / 1000;
long msSecond = diffSecond % 1000;
long secThird = diffThird / 1000;
long msThird = diffThird % 1000;

// 格式化输出,确保毫秒部分是三位(不足补0)
System.out.println("firstDate = 0.000");
System.out.printf("secondDate= %d.%03d%n", secSecond, msSecond);
System.out.printf("thirdDate = %d.%03d%n", secThird, msThird);

说明

  • 两种方案都能输出你需要的「x.xxx」格式结果,方案2更适合对精度要求较高的场景。
  • 示例中firstDate固定显示为0.000,是因为它作为起始时间,自身到自身的时间差为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:40:27