跳到主要内容
实用工具2026-05-13Begin4 分钟阅读

时间戳转换器:Unix 时间戳与日期互转完全指南

什么是 Unix 时间戳

Unix 时间戳(Unix Timestamp / Epoch Time)是从 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数——把任意时间戳粘贴到在线 timestamp converter 即可瞬间看到对应日期。它是一个整数,例如:

  • 1700000000 → 2023-11-14 22:13:20 UTC
  • 1700000000000 → 同一时刻(但以毫秒为单位)

时间戳是编程中最常用的时间表示方式,因为它是时区无关的纯数字,便于存储、比较和计算;对于周期性定时任务而非一次性时间点,cron parser 是互补的工具。

为什么需要时间戳转换

  1. 调试 API:后端返回的时间戳需要转换为可读格式才能理解
  2. 日志分析:系统日志中的时间戳需要转换为本地时间
  3. 数据库查询:SQL 中的时间戳字段需要转换为日期
  4. 跨时区协作:时间戳是统一的时间基准,避免时区混淆

如何使用在线时间戳转换器

使用 ToolVault 工具匣 的 时间戳转换器:

  1. 时间戳 → 日期:粘贴时间戳数字,工具自动识别秒/毫秒/微秒
  2. 日期 → 时间戳:选择或输入日期时间,一键生成时间戳
  3. 自动识别:粘贴任意时间戳,工具自动判断单位(s/ms/μs)

时间戳单位详解

单位位数示例常见场景
秒(s)10位1700000000Unix/Linux, SQL, Redis
毫秒(ms)13位1700000000000JavaScript, Java, Go
微秒(μs)16位1700000000000000MySQL, 高精度计时

自动识别技巧

看时间戳的位数可以快速判断单位,也可以直接用 timestamp converter 自动识别:

  • 10 位数字 → 秒(如 1700000000)
  • 13 位数字 → 毫秒(如 1700000000000)
  • 16 位数字 → 微秒(如 1700000000000000)

编程语言中的时间戳

JavaScript / TypeScript

// 当前时间戳(毫秒)
const ms = Date.now();  // 1700000000000

// 当前时间戳(秒)
const s = Math.floor(Date.now() / 1000);  // 1700000000

// 毫秒 → Date 对象
const date = new Date(1700000000000);

// Date → 毫秒
const timestamp = date.getTime();

Python

import time
from datetime import datetime

# 当前时间戳(秒)
timestamp = int(time.time())

# 时间戳 → datetime
dt = datetime.fromtimestamp(1700000000)

# datetime → 时间戳
timestamp = int(dt.timestamp())

Go

import "time"

// 当前时间戳(秒)
timestamp := time.Now().Unix()

// 时间戳 → Time
t := time.Unix(1700000000, 0)

常见时间戳陷阱

毫秒 vs 秒混淆

最常见的错误。JavaScript 的 Date.now() 返回毫秒,而 Unix 标准是秒。如果把毫秒当秒传给 new Date(),会得到一个遥远未来的日期。

时区问题

时间戳本身是 UTC 的,但 new Date().toLocaleString() 会使用本地时区。在跨时区协作时,始终以 UTC 为基准。

2038 年问题

32 位有符号整数的最大值为 2147483647,对应 2038 年 1 月 19 日。届时 32 位 Unix 时间戳将溢出。现代系统已迁移到 64 位时间戳,但嵌入式系统和旧数据库仍需注意。

纳秒与雪花 ID

19 位时间戳(如 1700000000000000000)通常是纳秒级,MySQL TIMESTAMP(6) 或某些日志系统会用到。也有系统把 19 位当雪花 ID(时间戳 + 机器位 + 序列)——前者是时间,后者是分布式 ID,解码方式完全不同。遇到 19 位数字时先看量级:1e18 左右是纳秒时间,远大于此(如 1e18 * 10)才是雪花 ID。

实现注记 / Implementer's note

时间戳工具内部做单位启发式判断:按位数粗分(10 位秒 / 13 位毫秒 / 16 位微秒 / 19 位纳秒),再按量级二次校验(例如 19 位值若除以 1e9 后落在合理日期范围内,则判为纳秒)。双向转换都显示 UTC 与本地时区两列,避免「差 8 小时」的时区混淆。

FAQ

时间戳是时区无关的吗?

是的。Unix 时间戳是 UTC 时间的秒数,不涉及时区。同一时间戳在任何时区都表示同一时刻。只有在转换为可读日期时才需要考虑时区。

JavaScript 的 Date.now() 返回什么单位?

毫秒(ms)。这是新手最常犯的错误——将 13 位毫秒时间戳当作 10 位秒级时间戳使用。

如何获取当前时间戳?

在浏览器控制台输入 Date.now()(毫秒)或 Math.floor(Date.now()/1000)(秒)。也可以使用 ToolVault 工具匣 的在线工具一键获取。


这篇实战笔记来自 ToolVault 工具匣。更多开发者工具请访问 首页。

补充注记

实现时间戳工具时我们坚持同时显示 UTC 与本地时区两列——因为「差 8 小时」的排错需要并排对照而不是单侧输出。Date 构造器对 ISO 与斜杠日期的不同解析(文中已述)也是我们在浏览器实测后写进工具注释的真实结论。