Unix 时间戳转换器:时间戳是什么及如何转换

工具 次阅读

什么是 Unix 时间戳?

Unix 时间戳(Unix Timestamp)是从 1970 年 1 月 1 日 00:00:00 UTC(称为 Unix 纪元)起,到某个时间点所经过的秒数(或毫秒数)。

例如:时间戳 1700000000 对应的是 2023 年 11 月 14 日 22:13:20 UTC。

为什么用时间戳?因为它是一个不受时区影响的绝对数字,在全球任何地方计算相同,非常适合在系统之间传递时间信息。

如何在线转换时间戳

使用 tool.tl 时间戳转换工具

  1. 打开 tool.tl/timestamp-converter
  2. 输入时间戳数字,选择单位(秒 or 毫秒)
  3. 立即显示对应的 UTC 时间和本地时间
  4. 也可以反向输入日期时间,获取对应时间戳

秒级时间戳 vs 毫秒级时间戳

类型示例值位数(约)常见于
秒级(Unix timestamp)170000000010 位Linux、数据库、后端 API
毫秒级(ms timestamp)170000000000013 位JavaScript、Java、前端日志
微秒级(μs)170000000000000016 位高精度日志、数据库事务

判断方法:10 位是秒级,13 位是毫秒级,16 位是微秒级。

各语言获取当前时间戳

# Python
import time
print(int(time.time()))          # 秒级:1700000000
print(int(time.time() * 1000))   # 毫秒级:1700000000000

// JavaScript
Date.now()                        // 毫秒级
Math.floor(Date.now() / 1000)    // 秒级

# Shell
date +%s                          # 秒级

-- SQL (MySQL)
SELECT UNIX_TIMESTAMP();          -- 秒级
SELECT NOW();                     -- 可读格式

时区与时间戳

时间戳本身不含时区信息,它始终代表 UTC 时间。展示给用户时需要转换到本地时区:

  • 时间戳 0 = 1970-01-01 00:00:00 UTC = 1970-01-01 08:00:00 北京时间(UTC+8)
  • 转换为本地时间时,需加上时区偏移量

常见时间戳参考

时间点Unix 时间戳(秒)
1970-01-01 00:00:00 UTC(纪元)0
2000-01-01 00:00:00 UTC946,684,800
2024-01-01 00:00:00 UTC1,704,067,200
2038-01-19 03:14:07 UTC(Y2K38 临界点)2,147,483,647
Y2K38 问题:32 位有符号整数存储的 Unix 时间戳在 2038 年 1 月 19 日溢出,这与 Y2K(千年虫)问题类似。现代系统已普遍使用 64 位整数存储时间戳,可支持到约 2920 亿年后。

常见问题(FAQ)

Q:时间戳可以是负数吗?

A:可以。负数时间戳表示 1970 年 1 月 1 日之前的时间。例如 -86400 表示 1969 年 12 月 31 日 00:00:00 UTC。

Q:如何在 MySQL 中存储时间戳?

A:MySQL 有两种时间类型:TIMESTAMP(存储 Unix 时间戳,范围 1970-2038)和 DATETIME(存储可读时间,范围 1000-9999,不受 2038 限制)。新项目推荐用 DATETIMEBIGINT(存毫秒时间戳)。

Q:ISO 8601 时间格式和时间戳有什么关系?

A:ISO 8601(如 2024-01-15T10:30:00Z)是人类可读的标准时间格式,末尾的 Z 表示 UTC 时区。将 ISO 8601 字符串解析后可以获取对应的 Unix 时间戳,两者可以相互转换。