ToolAct工具行动

时间戳转换工具

Unix 时间戳与日期时间格式互相转换

0
点击时间戳可复制(北京时间 UTC+8)

时间戳转日期

标准格式-
ISO 8601-
中文格式-
自定义格式-

日期转时间戳

秒级时间戳-
毫秒级时间戳-
Unix 时间-

全球时区对比

北京 (UTC+8)--
东京 (UTC+9)--
新加坡 (UTC+8)--
伦敦 (UTC+0/+1)--
巴黎 (UTC+1/+2)--
纽约 (UTC-5/-4)--
洛杉矶 (UTC-8/-7)--
悉尼 (UTC+10/+11)--

常用格式示例

YYYY-MM-DD HH:mm:ss
YYYY/MM/DD HH:mm:ss
YYYY-MM-DD
HH:mm:ss
YYYYMMDDHHmmss

什么是时间戳?

时间戳(Timestamp)是表示特定时间的数字值。Unix 时间戳是从 1970年1月1日00:00:00 UTC(称为 Unix 纪元)到指定时间所经过的秒数。它是计算机系统中表示时间的标准方式,具有跨平台、跨时区一致的特点。时间戳分为秒级(10位数字)和毫秒级(13位数字),秒级时间戳常用于 Unix/Linux 系统,毫秒级常用于 JavaScript 等编程语言。

使用说明

时间戳转日期

  1. 在左侧卡片中输入 Unix 时间戳
  2. 选择目标时区(如北京时间 UTC+8)
  3. 点击「转换」按钮查看转换后的日期时间
  4. 结果包含标准格式、ISO 8601、中文格式等多种形式

日期转时间戳

  1. 在右侧卡片中选择日期和时间
  2. 选择该日期时间对应的源时区
  3. 点击「转换」按钮获取 Unix 时间戳
  4. 结果同时提供秒级和毫秒级时间戳

时区提示

  • 请确认源值使用的是秒还是毫秒,混用 10 位和 13 位时间戳是日期出错的常见原因。
  • 将人类可读日期转换为时间戳时务必确认目标时区,尤其涉及日志、定时任务和跨地域系统。

使用场景

将 Unix 时间戳转为可读日期粘贴秒级或毫秒级时间戳,工具会自动识别较短的秒级值,必要时转为毫秒级,然后在所选时区中显示标准格式、ISO 格式、中文格式和自定义格式的日期。10 位数值按秒处理,13 位按毫秒处理,能在最常见的混用错误传播为错误日期之前将其捕获。
从日期时间输入生成时间戳选择一个本地日期时间,将其转换为秒级、毫秒级时间戳和示例 Unix date 命令。快捷操作可将时间戳字段设为今天、明天、本周一、本月一日或今年一月一日。转换仅读取浏览器本地系统时钟,不涉及服务器时间服务、NTP 查询或远程 API,因此在任何时钟设置正确的机器上结果都可复现。
跨主要时区对比当前时间页面每秒更新当前时间戳,实时显示北京、东京、伦敦、巴黎、纽约、洛杉矶和悉尼等城市的当前时间,并提供可直接复制的常用格式示例。ISO 8601 和 RFC 3339 两种显示格式几乎相同;ISO 8601 允许多种可选分隔符,而 RFC 3339 是更严格的规范,固定格式并要求显式偏移量,对于日志和 API 载荷来说是更安全的选择。
在不同格式之间转换日志行将类似 '2024-05-12T08:30:00Z' 或 '1700000000' 的日志条目粘贴到输入框,在标准、ISO、RFC、中文格式和自定义格式之间切换,然后复制匹配日志管道或 grep 查询的变体格式。
校验缓存 TTL 和 JWT 过期时间用当前纪元秒数减去 Cache-Control: max-age 值,或粘贴 JWT 的 exp 声明来确认令牌是否仍然有效、即将过期或已经过期。在撤销会话前请务必向签发服务核实。使用 32 位有符号整数存储 Unix 秒数的遗留系统将在 2038-01-19 03:14:07 UTC 溢出,即所谓的 2038 年问题,因此仍在运行的 2010 年前固件在传入超过 2038 年的时间戳前应检查该限制。

技术原理

Unix 时间戳计量从 Unix 纪元(定义为 1970-01-01T00:00:00Z)起经过的时间,POSIX 时间以此作为零点来标记此后每一个时刻。POSIX 时间刻意忽略闰秒:每个日历日固定按 86,400 秒计算,因此跨越闰秒插入的两个时间戳与严格原子钟计数之间会有一秒偏差,但换来的好处是纪元秒与 UTC 日历字段之间的转换可以干净地通过除以 86,400 取模来完成。 日常最常见的两种格式是秒级(当前为 10 位数字,如 1717000000)和毫秒级(13 位数字,如 1717000000000)。JavaScript 的 Date.now() 返回自纪元以来的毫秒数,`new Date(ms)` 也接受毫秒;而 Unix `date +%s`、Go 的 time.Unix 以及大多数数据库 TIMESTAMP 列使用秒。基于长度的判断是常用的消歧方式:10 位数值按秒解读落在 2001-2286 年范围内,同一数值按毫秒解读则在 1970 年内。 展示时间戳需要时区。UTC 以 `Z` 后缀表示;其他偏移量使用 `±HH:MM` 格式(如 `+08:00` 表示中国标准时间,`-05:00` 表示美国东部标准时间)。ISO 8601 允许多种可选分隔符,而 RFC 3339 是更严格的规范,固定了格式,这就是为什么 API 规范通常要求使用带有显式偏移量的 RFC 3339。使用 32 位有符号整数存储纪元秒的遗留系统将在最大正值 2147483647 时溢出,对应 2038-01-19T03:14:07Z(即 2038 年问题);64 位存储则将边界推至远超人类相关的范围。

  • Unix 纪元固定为 1970-01-01T00:00:00Z,POSIX 时间忽略闰秒,因此每个日历日固定按 86,400 秒计算。
  • JavaScript Date.now() 返回毫秒;`Math.floor(Date.now() / 1000)` 可转换为秒级时间戳。
  • 2038 年边界:有符号 32 位时间戳在 2147483647 = 2038-01-19T03:14:07Z 时溢出;64 位存储可避免此问题。
  • ISO 8601 与 RFC 3339 对比:RFC 3339 是更严格的 ISO 8601 规范,要求显式偏移量(`Z` 或 `±HH:MM`),是 API 和日志的首选。
  • ECMAScript Date 限于纪元前后各 ±100,000,000 天(约 ±273,785 年),`new Date(8.64e15)` 和 `new Date(-8.64e15)` 是绝对边界。
  • JWT 的 `exp`、`iat` 和 `nbf` 声明、`Cache-Control: max-age` 以及 Cookie 的 `Expires` 均使用 Unix 秒(RFC 7519、RFC 7234),因此可直接与 `Math.floor(Date.now()/1000)` 进行加减运算。
  • 时区影响渲染后的日期时间,但不影响时间戳值本身;同一纪元秒在 UTC+8 和 UTC-5 下会显示为不同的当地时间。

示例

10 位 Unix 时间戳转可读日期

输入:  1781526600
UTC:    2026-06-15 12:30:00
北京时间 (UTC+8): 2026-06-15 20:30:00
ISO 8601: 2026-06-15T12:30:00Z

POSIX: IEEE 1003.1 将 Unix 时间定义为自 1970-01-01 00:00:00 UTC(Epoch)以来的秒数
ISO: ISO 8601 定义了 YYYY-MM-DDThh:mm:ssZ 格式,用于无歧义地表示日期时间

日期反向转回时间戳

输入: 2026-01-01 00:00:00 (UTC)
秒(10 位):             1767225600
毫秒(13 位):           1767225600000
Unix 命令:               date -d @1767225600

注意: JavaScript Date.getTime() 返回毫秒;Python time.time() 返回秒(浮点数)
POSIX: time_t 类型传统上是 32 位或 64 位有符号整数

区分秒和毫秒

1781526600     -> 10 位,秒        -> 2026-06-15 12:30:00 UTC
1781526600000  -> 13 位,毫秒      -> 2026-06-15 12:30:00.000 UTC

常见 bug:把 13 位数值当作秒解析,年份会变成约 74,000 年
快速判断:10-11 位是秒(1970-2286),13 位是毫秒(JavaScript 默认)

解析 JWT 的 exp 声明

JWT payload: { "exp": 1798617600 }
解码后:     2027-01-01 00:00:00 UTC
当前时间:   1781526600
剩余有效期: 17,091,000 秒(约 198 天)

RFC: RFC 7519 第 2 节将 NumericDate 定义为自 Epoch 以来的秒数

Y2038 边界检查

32 位有符号最大时间戳: 2147483647
解码后:                      2038-01-19 03:14:07 UTC
再加 1 秒:                   2147483648 -> 老式 32 位系统溢出

解决方案: 使用 64 位 time_t(现代 Linux/macOS 默认),或以 ISO 8601 字符串存储
POSIX: 32 位 time_t 系统在 2038-01-19 之后会发生回绕

常见问题

什么是 Unix 时间戳?

指自 1970-01-01 00:00:00 UTC(即「Unix 纪元」)以来经过的秒数。JavaScript 和许多 API 使用的是基于同一纪元的毫秒数(Unix 时间戳 × 1000)。页面两种都接受,并显示对应的本地时间和 UTC 时间。

秒、毫秒、微秒、纳秒有什么区别?

不同系统使用不同精度。Unix 的 `time()` 返回秒;JavaScript 的 Date.now() 返回毫秒;Java 的 Instant 支持纳秒。页面按位数自动识别:10 位 = 秒(覆盖 2001-2286 年),13 位 = 毫秒,16 位 = 微秒,19 位 = 纳秒。

为什么 2038 年 1 月 19 日很重要?

这就是「2038 年问题」:32 位有符号的 Unix 时间戳会在 2038-01-19 03:14:07 UTC 溢出。仍在使用 32 位 time_t 的系统会回退到 1901 年。现代 64 位系统在数十亿年内都不会受影响,但遗留的嵌入式系统需要修复。

时区是怎么处理的?

Unix 时间戳本质上就是 UTC。页面会显示你的本地时间和 UTC 时间,并允许你额外选择任意 IANA 时区(Asia/Shanghai、America/New_York、Europe/London)展示。夏令时会按时区自动应用。

为什么解析「YYYY-MM-DD」时有些地方默认按 UTC 处理?

ISO 8601 格式中不带时区的日期本身就是有歧义的。JavaScript 的 Date 构造函数把仅含日期的字符串视为 UTC,把含日期时间的字符串视为本地时间——这是「差一天」类 bug 的著名来源。本页面会明确标注实际使用的时区。

换算是在本地完成的吗?

是的。计算依赖 JavaScript 的 Date 和 Intl.DateTimeFormat,不会上传任何时间戳。

可以生成未来的时间戳吗?

可以。选择一个未来日期,页面会返回对应的时间戳。适用于设置 JWT 的 exp 字段、cron 任务的测试日期,或代码中的缓存过期时间。