epoch 毫秒转日期:转换 13 位时间戳和 long 值
把 epoch 毫秒转换为可读日期的指南。涵盖 13 位时间戳、JavaScript Date、Java long 值、毫秒与秒,以及为什么错误的单位会产生 1970 年或很遥远的日期。
什么是 epoch 毫秒
epoch 毫秒计数自 1970 年 1 月 1 日 00:00:00 UTC 起的毫秒。它使用与 Unix 秒相同的 Unix 纪元,但精度多三位。现代的 epoch 毫秒值通常为 13 位,如 1700000000000。
如何把 millis 转为日期
如果值已经是毫秒,JavaScript Date 可以直接读取。如果接收工具期望秒,请先除以 1000。主要错误是在错误的边界上做乘除。
- JavaScript: new Date(1700000000000).toISOString()
- Milliseconds to seconds: Math.floor(1700000000000 / 1000)
- Seconds to milliseconds: 1700000000 * 1000
- Java Instant: Instant.ofEpochMilli(1700000000000L)
- Python: datetime.fromtimestamp(ms / 1000, tz=timezone.utc)
在 Java 和数据库中把 long 转为日期
搜索「long 转日期」通常来自 Java、Kotlin、Android,或把时间戳存为 64 位整数的数据库导出。该值可能是 epoch 毫秒,但也可能是秒、微秒或纳秒。转换前请检查位数。
- 10 位:很可能是 Unix 秒
- 13 位:很可能是 Unix 毫秒或 Java long 毫秒
- 16 位:很可能是微秒
- 19 位:很可能是纳秒
- 始终用单位命名列,例如 created_at_ms
为什么毫秒会转换成奇怪的日期
把毫秒值当作秒会得到极其遥远的未来日期。把秒值当作毫秒会得到接近 1970 年 1 月的日期。位数是最快的诊断方式。
- 1700000000000 作为毫秒 = 2023-11-14 22:13:20 UTC
- 1700000000000 作为秒 = 约公元 55840 年,视库而定
- 1700000000 作为秒 = 2023-11-14 22:13:20 UTC
- 1700000000 作为毫秒 = 1970-01-20 16:13:20 UTC
epoch 毫秒常见问题
- ms 的 epoch 时间和 Unix 时间戳一样吗?
- 使用相同的纪元,但单位是毫秒而非秒。经典的 Unix 时间戳通常指秒。
- epoch 毫秒时间戳有几位?
- 对当前日期,epoch 毫秒通常为 13 位。
- JavaScript 用毫秒还是秒?
- JavaScript Date 用毫秒。Date.now() 返回 epoch 毫秒。
- 如何把 Java long 时间戳转为日期?
- 若 long 是 epoch 毫秒,用 Instant.ofEpochMilli(value);若是 epoch 秒,用 Instant.ofEpochSecond(value)。先检查位数:13 位通常是毫秒,10 位通常是秒。
More posts
什么是 UTC 时间?含义、偏移与转换详解Unix 时间转日期:把 Unix 时间戳转换为可读时间纪元时间戳详解:Unix 时间、POSIX 时间与自 1970 年起的秒epoch 转换器指南:转换纪元时间、Unix 时间和时间戳日期转 epoch:把时间转换为 Unix 时间戳或纪元时间当前 Unix 时间戳:纪元时钟、UTC 时间与实时 Unix 时间2026 年初的 Unix 时间戳:1767225600 详解JavaScript Date.now():获取与转换 Unix 时间戳毫秒 vs 秒:让每个应用都崩溃的单位混淆在数据库中存储时间戳:DATETIME vs INT vs BIGINT无需库的 JavaScript 时区正确日期格式化每个开发者都发布过的 7 个 Unix 时间戳 bug纪元时间详解:Unix 时间戳零是什么?