🕐
← 返回教程列表

如何将 Unix 时间戳转换为人类可读的日期

· 标签: unix-timestamp, conversion, date-conversion, timezone, epoch-converter

为什么要转换 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 时间戳转换器 进行即时、准确的转换,并自动识别时区。