Unix时间戳(Unix Timestamp),又称Unix时间(Unix Time)或POSIX时间(POSIX Time),是一种广泛使用的时间表示方式。它定义为从协调世界时(UTC)1970年1月1日00时00分00秒(即Unix纪元,Epoch Time)起至现在的总秒数或毫秒数。Unix时间戳最初由Unix操作系统引入,现已成为几乎所有计算系统的标准时间格式。
时间戳的核心优势在于其简洁性和跨平台兼容性。它是一个纯数字,不受时区、语言或地区的影响,便于存储、传输和计算。无论是10位的秒级时间戳还是13位的毫秒级时间戳,都能在全球范围内唯一标识一个时间点。这使得时间戳成为数据库记录、API接口、日志系统、缓存过期、Token签发等场景的首选时间格式。
需要注意的是,Unix时间戳本身不包含时区信息。同一个时间戳在不同时区下会显示为不同的本地时间。例如,时间戳0在UTC时区表示1970年1月1日00:00:00,而在北京时间(UTC+8)则表示1970年1月1日08:00:00。因此,在进行时间戳转换时,必须明确指定目标时区才能获得正确的本地时间。
| 位数 | 单位 | 示例 | 精度 | 常见应用场景 |
|---|---|---|---|---|
| 10位 | 秒 | 1776652800 | 1秒 | Unix/Linux系统、PHP time()、MySQL UNIX_TIMESTAMP() |
| 13位 | 毫秒 | 1776652800000 | 0.001秒 | JavaScript Date.now()、Java System.currentTimeMillis() |
| 16位 | 微秒 | 1776652800000000 | 0.000001秒 | Python time.time()、PHP microtime(true) |
| 19位 | 纳秒 | 1776652800000000000 | 0.000000001秒 | Go time.Now().UnixNano()、高精度科学实验 |
Unix时间戳是基于UTC(协调世界时)计算的,与时区无关。这意味着同一个时间戳在世界任何地方都代表同一个绝对时间点。只有在将时间戳转换为人类可读的本地时间时,才需要根据时区进行偏移计算。
全球主要时区与时间戳0(1970-01-01 00:00:00 UTC)的对应关系如下:北京时间(UTC+8)为1970年1月1日08:00:00,美国东部时间(UTC-5)为1969年12月31日19:00:00,美国太平洋时间(UTC-8)为1969年12月31日16:00:00,日本时间(UTC+9)为1970年1月1日09:00:00,中欧时间(UTC+1)为1970年1月1日01:00:00,印度时间(UTC+5:30)为1970年1月1日05:30:00,悉尼时间(UTC+10)为1970年1月1日10:00:00。
32位有符号整数能表示的最大值为2147483647,对应的时间戳为2038年1月19日03:14:07 UTC。超过这个值后,32位系统的时间戳将发生溢出,导致时间显示错误甚至系统崩溃,这被称为2038年问题或Y2K38。
目前主流的64位操作系统和编程语言已经使用64位整数存储时间戳,可支持到约2900亿年后,完全不存在溢出问题。但对于仍在运行的老旧32位嵌入式系统、物联网设备和遗留软件,2038年问题仍然是一个潜在风险,需要提前进行系统升级和兼容性测试。
| 时区名称 | UTC偏移 | 代表城市 | 与UTC时差 |
|---|---|---|---|
| 北京时间 CST | UTC+8 | 北京、上海、香港、台北、新加坡 | 快8小时 |
| 日本时间 JST | UTC+9 | 东京、首尔、大阪 | 快9小时 |
| 印度时间 IST | UTC+5:30 | 新德里、孟买 | 快5.5小时 |
| 中欧时间 CET | UTC+1 | 柏林、巴黎、罗马、马德里 | 快1小时 |
| 东欧时间 EET | UTC+2 | 雅典、开罗、伊斯坦布尔 | 快2小时 |
| 莫斯科时间 MSK | UTC+3 | 莫斯科、圣彼得堡 | 快3小时 |
| 格林尼治时间 GMT | UTC+0 | 伦敦、都柏林、里斯本 | 基准时区 |
| 巴西时间 BRT | UTC-3 | 圣保罗、里约热内卢 | 慢3小时 |
| 美国东部时间 EST | UTC-5 | 纽约、华盛顿、波士顿、迈阿密 | 慢5小时 |
| 美国中部时间 CST | UTC-6 | 芝加哥、休斯顿、达拉斯 | 慢6小时 |
| 美国山地时间 MST | UTC-7 | 丹佛、凤凰城、盐湖城 | 慢7小时 |
| 美国太平洋时间 PST | UTC-8 | 洛杉矶、旧金山、西雅图、拉斯维加斯 | 慢8小时 |
| 阿拉斯加时间 AKST | UTC-9 | 安克雷奇 | 慢9小时 |
| 夏威夷时间 HST | UTC-10 | 檀香山 | 慢10小时 |
| 悉尼时间 AEDT | UTC+10 | 悉尼、墨尔本、布里斯班 | 快10小时 |