时间戳转换工具

秒级 / 毫秒级 Unix 时间戳转换为北京时间,或将日期时间转换为时间戳。计算在浏览器本地完成。

时间戳转时间

时间转时间戳

时区

当前时间 ± 偏移

以当前时刻为基准加减指定时长,用于计算过期时间、缓存 TTL 或定时任务触发时刻。

数值
单位
方向
基准时区
输出

常用时间格式转换

输入秒级或毫秒级时间戳,一次得到 ISO 8601、RFC 2822、中文日期、相对时间等常用格式。适合对照日志、接口和数据库字段。

显示时区
ISO 8601
2024-05-19T16:00:00+08:00
YYYY-MM-DD HH:mm:ss
2024-05-19 16:00:00
Unix 时间戳(秒)
1716105600
Unix 时间戳(毫秒)
1716105600000
RFC 2822
Sun, 19 May 2024 08:00:00 GMT
中文格式
2024年05月19日 16:00:00

编程语言代码示例

常见语言与 SQL 中读取 Unix 时间戳,以及在北京时间(Asia/Shanghai)下与日期时间互转。

// 当前时间戳
const sec = Math.floor(Date.now() / 1000);  // 秒,10 位
const ms  = Date.now();                     // 毫秒,13 位

// 时间戳 → 北京时间
const d = new Date(1716105600 * 1000);
d.toLocaleString("zh-CN", { timeZone: "Asia/Shanghai", hour12: false });
// 2024-05-19 16:00:00

// 北京时间 → 时间戳(带偏移的 ISO 8601)
Date.parse("2024-05-19T16:00:00+08:00");

实时转换

页面加载后持续显示当前北京时间及其对应的秒级、毫秒级 Unix 时间戳;输入变更后结果随即更新。

秒级与毫秒级

同时给出 10 位秒级与 13 位毫秒级结果,避免将秒与毫秒单位混淆。

本地处理

换算在浏览器本地完成,输入内容不会上传至服务器。

时间戳转换工具是什么?

Unix 时间戳是自 1970-01-01 00:00:00 UTC(北京时间 1970-01-01 08:00:00)起累计的秒数或毫秒数,表示一个绝对时刻,不包含时区信息。日志、接口与数据库中普遍使用该表示,因此需要将其格式化为可读的日期时间。

本工具在浏览器本地完成换算,输出北京时间、UTC、ISO 8601、相对时间与星期等字段,输入数据不会上传至服务器。

时间戳转时间

将 10 位或 13 位数字转换为日期时间。页面顶部并行显示当前秒级与毫秒级时间戳;将其填入「时间戳转时间」后,可得到北京时间与 ISO 8601。16 位微秒与 19 位纳秒会按对应精度换算为毫秒后再格式化。

时间转时间戳

将输入的年、月、日、时、分、秒视为所选时区(默认北京时间)下的当地时间,再换算为秒级与毫秒级 Unix 时间戳。若字符串带有 Z+08:00 等偏移,则按该偏移解析为绝对时刻,而不再使用下拉框中的时区。

怎么区分秒级和毫秒级?

秒与毫秒相差 10³。若将毫秒值按秒解释,结果会落在公元 5 万年量级;反之则落在 1970 年附近。对接接口时应先约定单位。

为什么不同工具会差 8 小时?

时间戳是绝对时刻。将其显示为「2024-05-19 16:00:00」时必须指定时区。北京时间相对 UTC 的标准偏移为 +8 小时,同一时刻的 UTC 表示为 08:00:00。若一侧按 UTC 格式化、另一侧按北京时间理解,就会相差 8 小时。

另一类偏差来自未标注时区的当地时间:同一串 2024-05-19 16:00:00 在纽约与在上海对应不同的绝对时刻。本工具的「时间转时间戳」按所选时区解析该当地时间,默认 Asia/Shanghai,而不是按浏览器的系统时区推断。

中国夏令时(1986–1991)

1986 年至 1991 年,我国曾在全国实行夏令时:每年大约从 4 月中旬第一个星期日 2 时起到 9 月中旬第一个星期日 2 时止(北京时间),时钟拨快 1 小时,相当于 UTC+9。1992 年起停止。

换算这段历史时间,不能固定加 8 小时。本工具使用浏览器内置的 IANA 时区 Asia/Shanghai,会按 tzdata 处理夏令时。不同系统的 tzdata 版本对历史规则可能略有差异,跨系统核对历史时间时建议统一运行环境。

常见编程语言中的时间戳

上方代码示例覆盖 Web、后端、系统与嵌入式中较常见的语言与 SQL。各片段均包含:读取当前秒级/毫秒级时间戳,以及在 Asia/Shanghai 下完成时间戳与日期时间的互转。MySQL 对应函数为 UNIX_TIMESTAMP()FROM_UNIXTIME()

Unix 纪元 0 与 2038 问题(Y2038)

「更多选项」中的 Unix 纪元 0 会填入时间戳 0,即 Unix 纪元:1970-01-01 00:00:00 UTC,对应北京时间 1970-01-01 08:00:00。它是秒级时间戳的原点,常用来核对换算是否把 UTC 与北京时间弄反,或检查系统是否把 0 当成空值。

「更多选项」中的 Y2038 会填入 2147483647,即 32 位有符号整数能表示的最大秒级时间戳,对应 UTC 2038-01-19 03:14:07(北京时间 2038-01-19 11:14:07)。下一秒溢出后会回绕到 1901 年,这就是常说的 2038 问题(Y2038)。64 位系统与 JavaScript 的毫秒时间戳不受该限制。仍使用 32 位 time_t 或数据库 INT 存储时间戳的系统,可将该边界作为测试用例。

常见问题

时间戳和日期时间有什么区别?
时间戳是从 Unix 纪元起算的整数,表示绝对时刻;日历日期时间(年-月-日 时:分:秒)是某一时区对该时刻的表示。未指定时区时,同一日期时间字符串可对应不同的绝对时刻。
如何判断秒级还是毫秒级?
按位数区分:10 位为秒,13 位为毫秒。本工具默认按位数识别,也可手动指定单位。
为什么和别的网站结果不一致?
优先核对:秒与毫秒是否互换、显示时区是否相同、1986–1991 年的历史夏令时是否按 Asia/Shanghai 处理而非固定 UTC+8。
Unix 纪元 0 和 Y2038 是什么?
Unix 纪元 0 是时间戳 0,对应 1970-01-01 00:00:00 UTC(北京时间 08:00:00)。Y2038 是 32 位有符号秒级时间戳的上限 2147483647,对应 UTC 2038-01-19 03:14:07。详见上文「Unix 纪元 0 与 2038 问题」。
输入的时间会上传吗?
不会。转换、批量与日期差均在浏览器本地完成,不向服务器发送输入内容。