如何将 Unix 时间戳转换为人类可读的日期
为什么要转换 Unix 时间戳?
Unix 时间戳非常适合机器处理——单个整数紧凑、无歧义且易于排序。但对人类来说,1785292800 在翻译成日历日期和时间之前毫无意义。无论你是在调试日志文件、分析数据库记录,还是阅读 API 响应,快速转换时间戳都是一项必备技能。
方法 1:使用我们的在线 Unix 时间戳转换器
最快、最可靠的方法是使用专用的转换工具。
我们的 Unix 时间戳转换器 接受秒和毫秒两种单位的时间戳,自动检测分辨率,并同时在多个时区中显示结果。你也可以反向操作——输入人类可读的日期,获得对应的 Unix 时间戳。
当你需要一个快速的临时转换、不想动命令行时,这种方法最为理想。
方法 2:使用 Linux 命令行(date 命令)
如果你可以使用 Linux 或 macOS 终端,date 命令是你最好的帮手。
将时间戳转换为人类可读的日期
# 在 GNU Linux 上(大多数发行版)
date -d @1785292800
# 指定自定义格式
date -d @1785292800 +"%Y-%m-%d %H:%M:%S"
# 输出: 2026-07-19 00:00:00
# 带时区
TZ="America/New_York" date -d @1785292800
# 输出: Sun Jul 19 00:00:00 EDT 2026
在 macOS(BSD date)上,语法略有不同:
# 在 macOS 上
date -r 1785292800
# 带自定义格式
date -r 1785292800 +"%Y-%m-%d %H:%M:%S"
将日期转换为 Unix 时间戳
# 在 GNU Linux 上
date -d "2026-07-19 00:00:00" +%s
# 在 macOS 上
date -j -f "%Y-%m-%d %H:%M:%S" "2026-07-19 00:00:00" +%s
方法 3:手动计算
虽然你应该很少需要手算,但理解其中的数学原理有助于弄清系统的运作方式。
计算公式
seconds = (year - 1970) × 31536000 + (month offset) × 86400 + day × 86400 + hours × 3600 + minutes × 60 + seconds
棘手的部分在于考虑闰年。一个年份如果是闰年,则它必须能被 4 整除,但世纪年份必须能被 400 整除。
快速心算近似值
- 86,400 秒 = 1 天
- 604,800 秒 = 1 周
- 约 31,536,000 秒 = 1 个平年
- 约 31,622,400 秒 = 1 个闰年
要快速估算,可以计算 timestamp / 86400 得到自 epoch 以来的天数,然后将这些天数加到 1970 年 1 月 1 日上。
方法 4:使用编程语言
每种主流编程语言都有内置的时间戳转换函数。以下是最常见的一些:
JavaScript(浏览器或 Node.js)
// 时间戳转日期(JavaScript 使用毫秒)
const timestamp = 1785292800;
const date = new Date(timestamp * 1000);
console.log(date.toISOString());
// 输出: 2026-07-19T00:00:00.000Z
// 日期转时间戳
const ts = Math.floor(new Date("2026-07-19").getTime() / 1000);
console.log(ts);
// 输出: 1785292800
Python
from datetime import datetime
# 时间戳转日期
dt = datetime.utcfromtimestamp(1785292800)
print(dt.isoformat())
# 输出: 2026-07-19T00:00:00
# 时区感知(Python 3.9+)
from zoneinfo import ZoneInfo
dt_tz = datetime.fromtimestamp(1785292800, tz=ZoneInfo("America/New_York"))
print(dt_tz.isoformat())
# 输出: 2026-07-19T00:00:00-04:00
# 日期转时间戳
import time
ts = time.mktime(datetime(2026, 7, 19).timetuple())
print(ts)
PHP
<?php
// 时间戳转日期
echo date("Y-m-d H:i:s", 1785292800);
// 输出: 2026-07-19 00:00:00
// 日期转时间戳
echo strtotime("2026-07-19 00:00:00");
// 输出: 1785292800
方法 5:使用电子表格软件
Google Sheets
使用公式 =DATE(1970,1,1) + A1 / 86400,其中 A1 包含时间戳。将结果单元格格式化为日期。
Microsoft Excel
=DATE(1970,1,1) + A1 / 86400
在 Windows 版 Excel 上,你可能需要使用:
=(A1 / 86400) + DATE(1970,1,1)
需要注意的边界情况
秒与毫秒
这是最常见的错误。如果将毫秒值(例如 1785292800000)传给期望秒的函数,你会得到一个大约在 56,000 年后的日期。
如何判断:
- 如果数字是 10 位,很可能是秒
- 如果数字是 13 位,很可能是毫秒
- 有些系统还使用微秒(16 位)或纳秒(19 位)
负数时间戳(1970 年之前的日期)
Unix 时间戳可以使用负数表示 epoch 之前的日期:
date -d @-126230400
# 输出: Tue Dec 31 00:00:00 -1969
并非所有转换工具都能正确处理负数时间戳。我们的在线转换器可以。
闰秒
Unix 时间按设计忽略闰秒。即使插入闰秒,Unix 时间戳也永远不会显示 :59:60。这意味着时间戳与原子时的偏差在缓慢但持续地累积(目前为 27 秒)。
总结
| 方法 | 最适合 |
|--------|----------|
| 在线转换器(/linux-timestamp) | 快速的临时转换 |
| date 命令 | 终端用户和脚本 |
| 手动计算 | 理解其工作原理 |
| 编程语言 | 自动化和应用 |
| 电子表格 | 数据分析 |
使用我们的 Unix 时间戳转换器 进行即时、准确的转换,并自动识别时区。