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

Java中截断Duration:如何去除Duration对象的小数秒部分

去除Duration中的小数秒部分

嘿,这个问题其实不难解决!虽然Duration类确实没有提供truncatedTo方法,但咱们有好几种简单的方式来去掉小数秒部分:

方法1:直接清零纳秒字段

Duration的小数秒部分是用纳秒数来存储的,所以最直接的办法就是调用withNanos(0)把纳秒部分设为0:

// 示例:5秒123毫秒的Duration
Duration original = Duration.ofSeconds(5, 123456789);
Duration truncated = original.withNanos(0);
System.out.println(truncated); // 输出 PT5S

一行代码搞定,逻辑清晰又高效。

方法2:通过总秒数重构Duration

如果你的场景需要先处理总秒数,也可以先把Duration转换成总整秒数(toSeconds()会自动丢弃小数部分),再用这个数值重新创建Duration:

// 示例:1分0.5秒的Duration
Duration original = Duration.ofMinutes(1).plusMillis(500);
long totalWholeSeconds = original.toSeconds();
Duration truncated = Duration.ofSeconds(totalWholeSeconds);
System.out.println(truncated); // 输出 PT1M

这个方式逻辑直观,适合需要先拿到总秒数做其他处理的场景。

方法3:用除法+乘法模拟截断

如果你习惯了truncatedTo的思路,还可以用“除以1秒再乘以1秒”的方式来模拟截断效果:

// 示例:2小时0.999秒的Duration
Duration original = Duration.ofHours(2).plusMillis(999);
Duration truncated = original.dividedBy(Duration.ofSeconds(1))
                            .multipliedBy(Duration.ofSeconds(1));
System.out.println(truncated); // 输出 PT2H

这个操作和truncatedTo(ChronoUnit.SECONDS)的逻辑完全一致,只是用Duration的运算来实现。

这几个方法都能完美实现你要的整秒精度需求,根据你的代码场景选最顺手的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:30:13