全部指南

把 Unix 时间戳转换成日期,再把日期转换回时间戳

发布于 · 更新于 阅读约 2 分钟

Unix 时间戳统计的是自通用时间 1970 年 1 月 1 日午夜以来经过的时间。两个问题决定最终的日期:数字的单位,以及您读取结果所用的时区。

一个参考值

转换 Unix 时间戳 会给出同一时刻的三种读法。以 1700000000 为例,浏览器设为巴黎时间:

读法结果
UTC 日期Tue, 14 Nov 2023 22:13:20 GMT
本地日期2023 年 11 月 14 日 23:13:20 UTC+1
ISO2023-11-14T22:13:20.000Z

本地时间跟随浏览器的时区:巴黎冬季多一小时。同一个时间戳只是一个时刻,在两个时区中读取而已。

单位根据位数识别

默认设置会根据数字的长度识别单位。下面三个值表示同一个时刻,精度不同。

数字位数识别出的单位得到的时刻
170000000010秒2023 年 11 月 14 日 22:13:20 UTC
170000000000013毫秒2023 年 11 月 14 日 22:13:20 UTC
170000000012345616微秒2023 年 11 月 14 日 22:13:20.123 UTC

规则:最多 11 位为秒,12 到 14 位为毫秒,15 和 16 位为微秒。“毫秒”设置会强制使用该单位。

规则的陷阱

由于单位是根据长度推断的,含糊的值只会按一种方式读取:10000000000(11 位)得到 2286 年 11 月 20 日,100000000000(12 位)得到 1973 年 3 月 3 日。早于 1973 年 3 月的毫秒时间戳只有 11 位或更少,会被当作秒来读取:此时请强制使用“毫秒”设置。

1970 年之前的值与 2038 年的上限

负数表示 1970 年之前的时刻:-1 得到 1969 年 12 月 31 日 23:59:59 UTC,0 得到 1970 年 1 月 1 日午夜。

数字 2147483647 是有符号 32 位整数能容纳的最大值:它得到 2038 年 1 月 19 日 03:14:07 UTC。下一个数 2147483648 得到 03:14:08:工具可以不受限制地继续,但用 32 位存储时间的系统做不到。

把日期转换成时间戳

输入日期而不是数字:工具会给出以秒和毫秒表示的时间戳。

输入以秒为单位的时间戳读法
2026-01-011767225600通用时间的午夜,未给出时区
2026-01-01T10:30:00+01:001767259800巴黎时间 10:30,即通用时间 09:30
2024-02-291709164800接受闰年

没有时区的日期按通用时间读取,而不是本地时间:工具会在结果中说明。不存在的日期,比如 2026 年 2 月 30 日,会被拒绝并给出提示。

常见错误

  • 把毫秒当作秒来读:日期会落到几千年以外。
  • 忘记时区:按本地时间读取的日期,再按通用时间发送,会偏差一小时或更多。
  • 写日期时不带时区,心里却想着本地时间,而它会按 UTC 被读取。

想计算两个日期之间相隔的天数,请参阅 计算两个日期之间相隔的天数。

检查转换

  1. 重新读一遍 UTC 那一行,它不依赖于设备。
  2. 检查结果第一行宣告的单位。
  3. 把得到的日期再转换回去:应该得到起始的数字。

转换 Unix 时间戳