Unix 时间戳转换
在任意时区把 Unix 时间戳转换成可读日期,或把日期转换成时间戳。自动识别秒、毫秒、微秒和纳秒。
批量转换
粘贴多个时间戳或日期,每行一个。数字会转换成日期,日期会转换成时间戳;每一行都会单独识别单位。
| 输入 | Unix(秒) | UTC(ISO 8601) | 本地时间 |
|---|
如何转换 Unix 时间戳
- 在左侧框中输入或粘贴 Unix 时间戳。工具会判断它是秒(10 位)、毫秒(13 位)、微秒(16 位)还是纳秒(19 位),你也可以自己选择单位。
- 要把日期转换成时间戳,在右侧选择日期和时间。你编辑哪一侧,哪一侧就是输入,结果会显示另一侧。
- 选择时区。本地时间就是你设备的时区。结果下方的列表会显示该时刻在所选时区和 UTC 下的时间,包括 ISO 8601、RFC 2822、HTTP 日期、相对时间和 Excel 序列号,每项都有复制按钮。
- 用快捷按钮可以跳到现在、当天、本周、本月或今年的开始,或按小时、按天前后调整。要转换一整列,把它粘贴到批量转换中,再把结果复制为 CSV。
什么是 Unix 时间戳?
Unix 时间也叫纪元时间或 POSIX 时间,是从 1970 年 1 月 1 日 00:00:00 UTC(即 Unix 纪元)起经过的秒数。到 2026 年底,它是一个接近 18 亿的 10 位数。由于它只是一个不带时区的数字,计算机、数据库、API 和日志文件都用它来记录时间点。把它变成日历日期只是显示上的一步,而这一步取决于你想看哪个时区。
秒、毫秒、微秒和纳秒
传统的 Unix 工具、PHP、MySQL 和 Python 的 time.time() 以秒计数。JavaScript 的 Date.now()、Java 的 System.currentTimeMillis() 和许多 JSON API 使用毫秒,多出三位数字。微秒(16 位)出现在 PostgreSQL 和一些分析工具中,纳秒(19 位)则见于 Go 和高精度日志。这个工具根据数字的位数猜测单位:11 位以内都按秒读取,可以覆盖到公元 5138 年的所有日期。例如,1700000000 是 2023 年 11 月 14 日 22:13:20 UTC,1700000000000 是以毫秒表示的同一时刻。
时区、夏令时和闰秒
时间戳在世界各地都是一样的,变的只是它在当地的读法。所以把日期转换回时间戳时需要时区:北京的 09:00 和纽约的 09:00 是不同的时刻。夏令时调整时钟时,有些当地时间根本不存在,有些则会出现两次。这两种情况工具都会提醒你,并告诉你选择了哪个时刻。Unix 时间也忽略闰秒:每天正好 86,400 秒,日期运算因此保持简单。
负时间戳和 2038 年问题
1970 年以前的日期是负数时间戳;−86400 是 1969 年 12 月 31 日。较旧的系统把 Unix 时间存为有符号 32 位整数,其最大值 2147483647 会在 2038 年 1 月 19 日 03:14:07 UTC 达到。再过一秒,这样的计数器就会回绕到 1901 年 12 月。现代操作系统和编程语言都使用 64 位时间,但嵌入式设备和旧的文件格式仍可能受影响。本页的所有转换都在你的浏览器中完成,不会发送到服务器。
编程语言中的 Unix 时间
在常用语言和工具中,如何获取以秒为单位的当前 Unix 时间戳,以及如何把时间戳 ts 转换回日期。
| 语言 | 当前时间戳 | 时间戳 → 日期 |
|---|---|---|
| JavaScript | Math.floor(Date.now() / 1000) | new Date(ts * 1000) |
| Python | int(time.time()) | datetime.fromtimestamp(ts, timezone.utc) |
| PHP | time() | date('c', $ts) |
| Java | Instant.now().getEpochSecond() | Instant.ofEpochSecond(ts) |
| C# | DateTimeOffset.UtcNow.ToUnixTimeSeconds() | DateTimeOffset.FromUnixTimeSeconds(ts) |
| Go | time.Now().Unix() | time.Unix(ts, 0) |
| Ruby | Time.now.to_i | Time.at(ts) |
| Swift | Int(Date().timeIntervalSince1970) | Date(timeIntervalSince1970: ts) |
| Bash | date +%s | date -d @1700000000 (GNU) · date -r 1700000000 (macOS) |
| PowerShell | [DateTimeOffset]::UtcNow.ToUnixTimeSeconds() | [DateTimeOffset]::FromUnixTimeSeconds(ts) |
| MySQL | UNIX_TIMESTAMP() | FROM_UNIXTIME(ts) |
| PostgreSQL | EXTRACT(EPOCH FROM now())::bigint | to_timestamp(ts) |
| SQLite | strftime('%s', 'now') | datetime(ts, 'unixepoch') |
| Excel / 表格 | =(NOW()-DATE(1970,1,1))*86400 | =A1/86400+DATE(1970,1,1) |
Python 需要 import time 和 from datetime import datetime, timezone;Java 使用 java.time.Instant。在 Excel 中,请把结果单元格设置为日期时间格式。
常见问题
当前的 Unix 时间戳是多少?
页面顶部的实时计数器以秒和毫秒显示当前 Unix 时间,并随时更新。2026 年 11 月 1 日时大约是 1,793,000,000。用“复制”按钮获取它,或点击“现在”进行转换。
Unix 时间戳是 UTC 吗?
是的。Unix 时间戳从 1970 年 1 月 1 日 UTC 午夜开始计秒,本身不带时区,所以同一个数字在任何地方都表示同一时刻。只有在显示为日期时,才需要选择时区,例如本地时间或 UTC。
为什么我的时间戳转换成了 1970 年或遥远的未来?
单位不对。毫秒时间戳按秒读取,会落在几万年以后;秒时间戳按毫秒读取,则会落在 1970 年 1 月。请把单位保持为“自动”,或手动选择秒、毫秒、微秒或纳秒。
如何在 Excel 或 Google 表格中转换 Unix 时间戳?
使用 =A1/86400+DATE(1970,1,1),并把单元格设置为日期时间格式。毫秒时间戳改为除以 86400000。结果是 UTC 时间;要换成你的时区,再加上小时偏移除以 24,例如北京时间加 8/24。
2038 年 Unix 时间会出什么问题?
把时间戳存为有符号 32 位数字的系统会在 2,147,483,647 溢出,也就是 2038 年 1 月 19 日 03:14:07 UTC。下一秒会被读成 1901 年 12 月 13 日。使用 64 位时间的系统(包括现代操作系统和编程语言)不受影响。