时间戳转换工具是什么?
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 位(约 1e9~1e10):秒,例如
1716105600 - 13 位(约 1e12):毫秒,与 JavaScript
Date.now()的单位一致 - 16 位:微秒,常见于部分数据库、Go
time.Now().UnixMicro() - 19 位:纳秒,常见于 Go
UnixNano()
秒与毫秒相差 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 问题」。 - 输入的时间会上传吗?
- 不会。转换、批量与日期差均在浏览器本地完成,不向服务器发送输入内容。