instant是java 8引入的不可变时间类,表示utc纳秒精度的瞬时点,增减时间需用plus/minus方法配合duration(如ofseconds)或java 9+的plusseconds等快捷方法,操作返回新对象。

Instant 是 Java 8 引入的不可变时间类,表示时间轴上的一个瞬时点(UTC 纳秒精度)。它本身不带时区信息,增减时间必须使用其提供的 plus 和 minus 方法,配合 TemporalAmount 类型的参数(如 Duration、Period)。
用 Duration 增减秒数(最常用)
秒数属于“时间长度”,应使用 Duration(表示基于时间的量,如秒、毫秒、纳秒),而不是 Period(用于年月日等日期单位)。
-
Instant.plus(Duration.ofSeconds(n)):增加 n 秒 -
Instant.minus(Duration.ofSeconds(n)):减少 n 秒 - 也支持毫秒、纳秒:
ofMillis()、ofNanos()
示例:
Instant now = Instant.now();Instant after10Sec = now.plus(Duration.ofSeconds(10));
Instant before5Sec = now.minus(Duration.ofSeconds(5));
直接传入数字秒数(Java 9+ 更简洁)
从 Java 9 开始,Instant 新增了直接接受 long 数值的方法:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
plusSeconds(long seconds)minusSeconds(long seconds)- 还有
plusMillis()、plusNanos()、minusMillis()等
示例(更直观):
Instant now = Instant.now();Instant later = now.plusSeconds(60); // 加 60 秒
Instant earlier = now.minusSeconds(30); // 减 30 秒
注意点:Instant 是不可变的
所有 plus/minus 操作都返回新对象,原 Instant 不会改变:
- ❌ 错误写法:
now.plusSeconds(10);(结果未保存) - ✅ 正确写法:
Instant result = now.plusSeconds(10);
扩展:处理负数和大数值
plusSeconds(-5) 等价于 minusSeconds(5),语义上推荐用正数 + 对应方法;
数值过大(如超过 long 范围)会抛 ArithmeticException,但日常业务中极少遇到。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










