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

Java 8中如何将long+TimeUnit组合转换为Duration实例?

解决方案

你不需要手写冗长的switch分支做单位映射,Java 8下可以直接用TimeUnit内置的纳秒转换方法实现,无精度损失,代码非常简洁:

static Duration convert(long dur, TimeUnit timeUnit) {
    return Duration.ofNanos(timeUnit.toNanos(dur));
}

实现说明

  • 所有TimeUnit定义的时间单位(纳秒、微秒、毫秒、秒、分、时、天)都是纳秒的整数倍,转换到纳秒不会出现精度丢失问题
  • TimeUnit.toNanos(long)方法本身在数值溢出时会抛出ArithmeticException,和你手写switch调用Duration.ofDays/ofHours等工厂方法的异常行为完全一致,没有兼容风险
  • 语义完全匹配:TimeUnit.DAYS是固定24小时的时长单位,和Duration.ofDays()对“天”的定义完全一致,不存在时区、夏令时导致的逻辑偏差
  • 注意不要用转毫秒的实现(比如Duration.ofMillis(timeUnit.toMillis(dur))),这种写法在处理小于毫秒粒度的时长时会丢失精度。

如果后续升级到Java 9及以上版本,可以直接使用JDK内置的官方API timeUnit.toDuration(dur) 替换上述自定义方法,行为完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:45:54