如何把纪元时间转换为可读日期

在主流编程语言中把 Unix 时间戳转换为可读日期的实用指南,附在线工具和考虑时区的示例。

什么是 epoch 时间?

epoch 时间(也称 Unix 时间或 POSIX 时间)是自 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数。它是计算中表示时刻的通用标准。几乎所有语言和操作系统都原生支持,使其成为在系统间存储与交换时间戳最可靠的格式。

第 1 步 — 识别你的时间戳格式

转换之前,先确定你的时间戳是秒还是毫秒:

  • 10 位(如 1700000000)→ 自 Unix 纪元起的秒
  • 13 位(如 1700000000000)→ 自 Unix 纪元起的毫秒
  • 拿不准时,除以 1000 看看年份是否合理
  • 你也可以把时间戳粘贴到上方的转换器,它会自动识别

在 JavaScript 中将 epoch 转为日期

JavaScript 的 Date 构造函数接受毫秒。如果你的时间戳是秒,请先乘以 1000。

  • new Date(1700000000 * 1000).toISOString() → '2023-11-15T06:13:20.000Z'
  • new Date(1700000000 * 1000).toUTCString() → 'Wed, 15 Nov 2023 06:13:20 GMT'
  • new Date(1700000000 * 1000).toLocaleString('en-US', { timeZone: 'America/New_York' })
  • new Date(1700000000000).getTime() → 1700000000000 (milliseconds back)

在 Python 中将 epoch 转为日期

Python 的 datetime 模块提供用于本地时间的 fromtimestamp() 和用于 UTC 的 utcfromtimestamp()。如需显式处理时区,使用 timezone.utc 参数。

  • datetime.datetime.fromtimestamp(1700000000) → local timezone
  • datetime.datetime.fromtimestamp(1700000000, tz=datetime.timezone.utc) → UTC (Python 3.2+)
  • datetime.datetime.fromtimestamp(1700000000).strftime('%Y-%m-%d %H:%M:%S') → formatted string
  • datetime.datetime.fromtimestamp(1700000000, tz=datetime.timezone.utc).isoformat() → ISO 8601

在 PHP 中将 epoch 转为日期

PHP 的 date() 函数和 DateTime 类都直接支持 Unix 时间戳。

  • date('Y-m-d H:i:s', 1700000000) → '2023-11-15 06:13:20' (server's local timezone)
  • gmdate('Y-m-d H:i:s', 1700000000) → '2023-11-15 06:13:20' (always UTC)
  • $dt = new DateTime(); $dt->setTimestamp(1700000000); $dt->format('c') → ISO 8601

在 Go 中将 epoch 转为日期

Go 的 time 包用 time.Unix(seconds, nanoseconds) 转换 Unix 时间戳。

  • time.Unix(1700000000, 0) → time.Time in local timezone
  • time.Unix(1700000000, 0).UTC() → force UTC
  • time.Unix(1700000000, 0).Format(time.RFC3339) → '2023-11-15T06:13:20Z'
  • time.Unix(1700000000, 0).Format('2006-01-02 15:04:05') → custom layout

转换 epoch 时间时的常见错误

使用 Unix 时间戳时最常见的错误:

  • 在 JavaScript 中忘记把秒乘以 1000 —— new Date(1700000000) 得到的是 1970 年而非 2023 年
  • 在服务端语言中把 JavaScript 的毫秒直接当作秒使用
  • 不指定时区而依赖服务器本地时区,后者因环境而异
  • 把时间戳存为字符串而非整数,从而破坏数值比较和运算

epoch 转日期常见问题

如何将 epoch 时间转换为日期?
先识别值是秒(10 位)还是毫秒(13 位),再用你所用语言的日期 API 转换 —— JavaScript 用 new Date(seconds * 1000),Python 用 datetime.fromtimestamp(seconds, tz=timezone.utc),或粘贴到上方的转换器。
为什么我的 epoch 时间戳转换成了 1970 年?
你把一个秒值传给了期望毫秒的函数,通常是 JavaScript 的 new Date()。请先把 10 位的秒值乘以 1000。
应该把 epoch 时间转换为 UTC 还是本地时间?
日志、API 和跨服务器比较使用 UTC,仅在显示时转换为用户的本地时区。epoch 值本身与时区无关。