instant.ofepochmilli() 是 java 8 中用于根据自 unix 纪元起的毫秒数创建 instant 对象的静态方法,要求参数为 long 类型毫秒值,正数表示纪元后、负数表示纪元前,需注意单位是毫秒而非秒,越界会抛 datetimeexception。

Instant.ofEpochMilli() 是 Java 8 引入的 java.time.Instant 类中的静态工厂方法,用于**直接根据自 1970-01-01T00:00:00Z(UTC)起的毫秒数**创建一个不可变的 Instant 对象。
基本用法:传入 long 类型毫秒值
该方法接收一个 long 类型参数,代表从 Unix 纪元(UTC 时间)开始经过的毫秒数。只要数值在有效范围内(约 ±292 百万年),就能成功创建。
- 正数表示纪元之后的时间(如
1717027200000L对应 2024-05-31T00:00:00Z) - 负数表示纪元之前的时间(如
-3600000L表示 1969-12-31T23:00:00Z) - 传入
0L得到的就是 Unix 起始时刻:1970-01-01T00:00:00Z
注意点:毫秒 vs 秒,别传错单位
这个方法明确要求单位是毫秒。如果手头只有秒级时间戳(比如 JavaScript 的 Date.now() 返回毫秒,但后端某些接口可能只给秒),必须先乘以 1000:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- ✅ 正确(毫秒):
Instant instant = Instant.ofEpochMilli(1717027200000L); - ❌ 错误(当成毫秒用了秒):
Instant instant = Instant.ofEpochMilli(1717027200);→ 会得到 1970 年的一个极早时间 - ✅ 秒转毫秒:
Instant instant = Instant.ofEpochMilli(seconds * 1000L);
异常处理:数值越界会抛 DateTimeException
虽然 long 范围很大,但 Instant 支持的时间范围比 long 更窄(内部用纳秒精度表示)。若毫秒值过大或过小(例如超过 ±10^13 毫秒),会抛出 DateTimeException。
- 常见越界值如
Long.MAX_VALUE或Long.MIN_VALUE通常会触发异常 - 生产环境建议加 try-catch,尤其当毫秒值来自外部输入时
- 例如:Instant.ofEpochMilli(Long.MAX_VALUE) 会立即抛异常
和 ofEpochSecond 的区别
别和 Instant.ofEpochSecond(long epochSecond, long nanoAdjustment) 混淆:
-
ofEpochMilli(millis)是“毫秒级便捷入口”,底层等价于ofEpochSecond(millis / 1000, (millis % 1000) * 1_000_000) - 如果已有秒+纳秒,优先用
ofEpochSecond;如果只有毫秒整数,直接用ofEpochMilli更清晰、不易出错
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










