Unix 时间戳转换

将 Unix 时间戳(秒或毫秒)转换为你所在时区和 UTC 的可读日期,也可以把日期转换回时间戳,并能自动识别时间戳的单位。

当前 Unix 时间 0

时间戳 → 日期

日期 → 时间戳

时间戳转日期:转换 Unix 时间戳

  1. 把数字粘贴到时间戳 → 日期输入框。空格、逗号和下划线会被忽略,所以 1,767,225,600 也可以;负数和小数同样支持。
  2. 单位可以保持自动检测,也可以手动选择秒、毫秒、微秒或纳秒。识别出的单位显示在输入框下方。
  3. 查看结果:你所在时区的时间、UTC、ISO 8601、RFC 2822 格式,以及“3 天前”这样的相对时间。ISO 和 RFC 两行各有一个复制按钮。

点击现在会填入当前时间;页面顶部的实时计数器以秒和毫秒显示当前的时间戳。

日期转时间戳:由日期得到时间戳

  1. 在日期 → 时间戳区域选择日期和时间,可精确到秒。
  2. 说明这个时间是本地时间(设备所在时区)还是 UTC。这个选择会让结果相差你所在时区与 UTC 的时差。
  3. 复制以秒或毫秒为单位的时间戳,或 ISO 8601 格式。

什么是 Unix 时间

Unix 时间(也叫纪元时间、POSIX 时间)计算的是自 1970 年 1 月 1 日 00:00:00 UTC(即“纪元”)以来经过的秒数。每一天都按正好 86,400 秒计算,闰秒被忽略。同一时刻在地球上任何地方都是同一个数字,所以数据库、日志、API 和文件系统都用它来记录时间,而不必纠结时区。只有把时间戳换算成日历日期时,时区才会起作用。

秒、毫秒、微秒还是纳秒?

不同系统使用不同的单位,看位数就能判断。对于当今的日期:

单位位数2026 年 1 月 1 日 00:00 UTC 的值常见来源
秒101767225600Unix shell、PHP、Python 的 int(time.time())、JWT 声明
毫秒131767225600000JavaScript 的 Date.now()、Java、许多 JSON API
微秒161767225600000000部分数据库和链路追踪工具
纳秒191767225600000000000Go 的 UnixNano()、InfluxDB、高精度日志

自动检测把小于 10¹¹ 的数读作秒,小于 10¹⁴ 的读作毫秒,小于 10¹⁷ 的读作微秒,其余读作纳秒。对于 1973 年到 5138 年之间的任何日期,判断都是正确的。例外是 1966 年末至 1973 年 3 月初之间日期的毫秒值:它们小到看起来像秒,所以对于离 1970 年这么近的日期,请手动选择单位。日期显示到毫秒;更细的位数可以输入,但不会显示。

示例

时间戳UTC 日期和时间说明
01970 年 1 月 1 日 00:00:00纪元本身
10000000002001 年 9 月 9 日 01:46:40第一个 10 位数的时间戳
17672256002026 年 1 月 1 日 00:00:00本工具输入框中的示例值
-864001969 年 12 月 31 日 00:00:00负数表示 1970 年之前
21474836472038 年 1 月 19 日 03:14:07有符号 32 位整数的最大值

反方向的例子:把 2026 年 7 月 1 日 12:00 按 UTC 输入,得到 1782907200。在设置为北京时间(UTC+8)的电脑上按本地时间输入同一时刻,得到 1782878400,正好早 28,800 秒(8 小时)。

时区与夏令时

一个时间戳就是一个时刻,但在世界各地读出来不一样。1767225600 在北京是 2026 年 1 月 1 日上午 8 点,在纽约是 2025 年 12 月 31 日晚上 7 点。如果换算出的日期看起来差了几个小时,通常时间戳本身没问题,只是显示所用的时区不同。夏令时会按你所在的时区自动处理。想把同一时刻在多个城市并排对照,请使用时区转换。

在代码和电子表格中转换

  • JavaScript:当前值用 Math.floor(Date.now() / 1000);转换用 new Date(1767225600 * 1000).toISOString()。
  • Python:int(time.time());datetime.fromtimestamp(1767225600, tz=timezone.utc)。
  • PHP:time();date('c', 1767225600)。
  • Shell:date +%s;转换时 Linux 用 date -d @1767225600,macOS 用 date -r 1767225600。
  • SQL:PostgreSQL 用 to_timestamp(1767225600),MySQL 用 FROM_UNIXTIME(1767225600)。
  • Excel 或 Google 表格:输入 =A1/86400+DATE(1970,1,1),再把单元格格式设为日期时间。结果是 UTC 时间,要换成北京时间请加上 +8/24。

常见问题

什么是 2038 年问题?

用有符号 32 位整数存储 Unix 时间的软件最多只能数到 2,147,483,647,也就是 2038 年 1 月 19 日 03:14:07 UTC。再过一秒,数值会回绕成 −2,147,483,648,被解读为 1901 年 12 月 13 日。现代操作系统和编程语言都使用 64 位时间,但老旧的嵌入式设备、文件格式以及声明为 32 位整数的数据库字段仍可能受影响。

为什么我的时间戳有 13 位?

因为它以毫秒为单位。除以 1,000 就是秒;直接粘贴到这里也行,自动检测会处理。

Unix 时间戳包含闰秒吗?

不包含。Unix 时间假定每天都是 86,400 秒,所以闰秒不计入;操作系统会改为重复一秒或把它平摊掉。日常换算中看不出任何差别。

可以转换多大范围的日期?

浏览器日期系统所支持的范围,大约从公元前 271,821 年到公元 275,760 年。超出范围会显示超出范围的提示。