什么是 Unix 时间戳?
Unix 时间戳(Unix Timestamp)是从 1970 年 1 月 1 日 00:00:00 UTC(称为 Unix 纪元)起,到某个时间点所经过的秒数(或毫秒数)。
例如:时间戳 1700000000 对应的是 2023 年 11 月 14 日 22:13:20 UTC。
为什么用时间戳?因为它是一个不受时区影响的绝对数字,在全球任何地方计算相同,非常适合在系统之间传递时间信息。
Unix 时间戳(Unix Timestamp)是从 1970 年 1 月 1 日 00:00:00 UTC(称为 Unix 纪元)起,到某个时间点所经过的秒数(或毫秒数)。
例如:时间戳 1700000000 对应的是 2023 年 11 月 14 日 22:13:20 UTC。
为什么用时间戳?因为它是一个不受时区影响的绝对数字,在全球任何地方计算相同,非常适合在系统之间传递时间信息。
使用 tool.tl 时间戳转换工具:
| 类型 | 示例值 | 位数(约) | 常见于 |
|---|---|---|---|
| 秒级(Unix timestamp) | 1700000000 | 10 位 | Linux、数据库、后端 API |
| 毫秒级(ms timestamp) | 1700000000000 | 13 位 | JavaScript、Java、前端日志 |
| 微秒级(μs) | 1700000000000000 | 16 位 | 高精度日志、数据库事务 |
判断方法: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 UTC | 946,684,800 |
| 2024-01-01 00:00:00 UTC | 1,704,067,200 |
| 2038-01-19 03:14:07 UTC(Y2K38 临界点) | 2,147,483,647 |
A:可以。负数时间戳表示 1970 年 1 月 1 日之前的时间。例如 -86400 表示 1969 年 12 月 31 日 00:00:00 UTC。
A:MySQL 有两种时间类型:TIMESTAMP(存储 Unix 时间戳,范围 1970-2038)和 DATETIME(存储可读时间,范围 1000-9999,不受 2038 限制)。新项目推荐用 DATETIME 或 BIGINT(存毫秒时间戳)。
A:ISO 8601(如 2024-01-15T10:30:00Z)是人类可读的标准时间格式,末尾的 Z 表示 UTC 时区。将 ISO 8601 字符串解析后可以获取对应的 Unix 时间戳,两者可以相互转换。