Epoch 时间转换器
将 Unix 时间戳转换为 UTC 日期,或将日期转换为 Epoch 秒数。
如何使用此 Epoch 时间转换器
- 选择转换模式
在“转换模式”字段中选择“Epoch 转日期”或“日期转 Epoch”。
- Epoch 转日期
在“Epoch 时间戳(秒)”字段中输入 Unix 时间戳(以秒为单位)。
- 日期转 Epoch
在“日历日期”中选择日期,然后根据需要设置“小时 (UTC)”、“分钟 (UTC)”和“秒 (UTC)”。
- 查看结果
该计算器显示 UTC 值、Unix 毫秒数和星期。
此 Epoch 时间转换器的工作原理
此 Epoch 时间转换器可在 Unix 时间戳与人类可读的 UTC 日期之间进行转换。Unix 时间(也称为 POSIX 时间或 Epoch 时间)是指自 Unix Epoch(定义为 1970 年 1 月 1 日 UTC 午夜,即 1970-01-01T00:00:00Z)以来经过的秒数。这种单整数表示法是数据库、API、日志文件、JWT 令牌以及几乎所有现代编程语言中存储和传输时间戳的事实标准。该转换器支持双向转换:输入数字时间戳可返回对应的 UTC 日期、星期和毫秒值;输入日历日期和时间则可返回以秒和毫秒为单位的 Epoch 值。
Unix 时间 = 自 1970-01-01T00:00:00Z 以来经过的秒数 将 Unix 时间戳 1,700,000,000 转换为日期:从 1970-01-01 00:00:00 UTC 开始,增加 1,700,000,000 秒。这等于 19,675 天 17 小时 46 分钟 40 秒。生成的 UTC 日期为 2023-11-14 22:13:20 UTC,当天是星期二。对应的毫秒值为 1,700,000,000,000。反之,输入 2023 年 11 月 14 日 22:13:20 UTC,返回的 Epoch 值正好是 1,700,000,000。
时间戳 0 转换为 1970-01-01 00:00:00 UTC(星期四)。对应的毫秒值为 0。
时间戳 1,704,000,000 转换为 2023-12-31 12:00:00 UTC(星期日)。在“日期转纪元”模式下输入该日期和时间将返回 1,704,000,000。
- ✓ 所有计算均采用 UTC。本地时间转换需要在转换后应用相应的时区偏移量。
- ✓ 不计算闰秒。与 POSIX 类似,此转换器将每一天视为恰好 86,400 秒,这与大多数编程语言和操作系统的行为一致。
- ✓ 负时间戳表示 Unix 纪元(1970 年 1 月 1 日)之前的日期。例如,-86400 对应 1969 年 12 月 31 日。
- ✓ 毫秒时间戳在输入前应除以 1,000;转换器接受秒作为输入,并在结果中显示对应的毫秒值。
- JavaScript 的 Date.now() 和 Java 的 System.currentTimeMillis() 返回的是毫秒而非秒 —— 在此处输入值之前请除以 1,000,或使用毫秒输出进行比较。
- 2038 年问题会影响 32 位有符号整数时间戳,此类时间戳将在 2038 年 1 月 19 日 03:14:07 UTC 发生溢出。大多数现代系统已迁移至 64 位时间戳。
- 在调试 API 响应或日志文件时,请留意那些偏差正好为 3,600 或 7,200 秒的时间戳 —— 这通常表示在处理流程的某个环节应用(或忽略)了时区偏移。
- Epoch 时间始终是单调递增的(忽略闰秒调整),这使其成为排序事件、计算时长以及生成基于时间的唯一标识符的理想选择。
- IEEE Std 1003.1 (POSIX) — 自 Epoch 以来的秒数定义
- Unix Epoch 起源 — Unix Heritage Society 和 Bell Labs 文档
- RFC 3339 — 互联网上的日期和时间:时间戳
什么是 Unix 时间戳?
Unix 时间戳是从 1970 年 1 月 1 日 UTC 午夜(即 Unix 纪元)起经过的秒数。这个单一整数是在数据库、API、日志文件和大多数编程语言中表示时间的业界标准。由于它与时区无关且单调递增,因此简化了排序、时长计算和基于时间的比较。JavaScript 的 Date.now() 和许多 API 返回的是毫秒(1,000 × 秒),因此在此处输入毫秒值之前请先除以 1,000。负时间戳表示 1970 年之前的日期;例如,-86400 正好是纪元前的一天。
开发者使用纪元时间的场景
开发者在数据库中存储事件时间、在 JSON API 中序列化日期、生成基于时间的缓存键以及调试日志条目时会使用 Unix 时间戳。数据库列通常将时间戳存储为整数,以便进行高效的索引和范围查询。API 响应经常返回纪元秒或毫秒,以避免时区歧义。在调试时,将日志或 JWT 声明中的原始时间戳转换为人类可读的日期,可以快速揭示该值是否正确或是否存在时区偏差。纪元时间还用于速率限制、会话过期以及在分布式系统中生成可排序的唯一标识符。
Epoch 时间转换器常见问题
什么是 Unix Epoch?
Unix Epoch 是衡量 Unix 时间的参考点:即 UTC 时间 1970 年 1 月 1 日午夜 (1970-01-01T00:00:00Z)。时间戳 0 对应于那一时刻。
为什么我的 JavaScript 时间戳位数更多?
JavaScript 的 Date.now() 返回的是自纪元以来的毫秒数,而非秒数。除以 1,000 即可转换为此工具使用的秒格式,或直接与毫秒输出进行比较。
我可以输入负的时间戳吗?
可以。负值表示纪元之前的日期。例如,-86400 对应 1969-12-31T00:00:00Z,即纪元前整整一天。
此工具处理闰秒吗?
不处理,这符合 POSIX 标准。POSIX 时间假设每天正好是 86,400 秒。自 1972 年以来插入的 27 个闰秒没有被单独表示,这意味着在闰秒边界处,UTC 和 Unix 时间可能相差一秒。
什么是 2038 年问题?
将 Unix 时间存储为 32 位有符号整数的系统将在 UTC 时间 2038 年 1 月 19 日 03:14:07 发生溢出,变为一个巨大的负数并产生 1901 年的日期。大多数现代平台现在使用 64 位时间戳,在超过 2900 亿年内不会溢出。