Java中Duration最常用创建方式是静态工厂方法ofSeconds()和ofMinutes(),均直接返回不可变实例;ofSeconds支持整数秒、带纳秒的秒数及负值,ofMinutes本质调用ofSeconds且更语义化但不支持小数分钟。

Java 中用 Duration 创建持续时间对象,最常用的就是静态工厂方法 ofSeconds() 和 ofMinutes(),它们都直接返回 Duration 实例,无需 new。
ofSeconds:按秒创建 Duration
支持整数秒和带纳秒的秒数(double 或 long + nanos):
-
Duration.ofSeconds(60)→ 表示 60 秒(即 1 分钟) -
Duration.ofSeconds(5, 500_000_000)→ 表示 5 秒 + 500 毫秒(500_000_000 纳秒) -
Duration.ofSeconds(-120)→ 负值表示反向持续时间(-2 分钟)
ofMinutes:按分钟创建 Duration
本质是调用 ofSeconds(minutes * 60),更语义化:
-
Duration.ofMinutes(30)→ 30 分钟(等价于ofSeconds(1800)) -
Duration.ofMinutes(-5)→ -5 分钟,可用于倒计时或时间偏移 - 不支持小数分钟;如需 1.5 分钟,应写成
Duration.ofSeconds(90)或Duration.ofMillis(90_000)
其他常用创建方式(补充参考)
除了 ofSeconds / ofMinutes,还有:
立即学习“Java免费学习笔记(深入)”;
-
Duration.ofHours(2)→ 2 小时 -
Duration.ofDays(1)→ 24 小时(注意:不是日历天,不考虑夏令时等) -
Duration.parse("PT10S")→ 解析 ISO-8601 格式字符串(如 PT10S=10秒,PT2M=2分钟)
注意事项
Duration 表示的是**时间量(time-based amount)**,不是某个具体时间段(比如“从 9:00 到 10:00”),它不绑定日期或时区。它适合用于加减操作,例如:
-
Instant.now().plus(Duration.ofMinutes(30))→ 当前时刻加 30 分钟 -
LocalDateTime.now().plus(duration)→ 同样适用(但推荐用Period处理年月日)
不复杂但容易忽略:Duration 是不可变的,所有操作都返回新实例。


















