在 Ubuntu(以及所有 Linux 系统)里,“时间戳偏移”通常不是系统随机出错,而是由时区、硬件时钟、NTP 同步或程序读取方式导致的。下面按常见原因逐一说明。
1970-01-01 00:00:00 UTC 起算示例:
date +%s # 时间戳(UTC)
date # 本地时间
如果程序用本地时间生成“时间戳”,就会看似偏移 8 小时(中国时区)。
✅ 解决:
timedatectl
确保:
Time zone: Asia/Shanghai (CST, +0800)
Ubuntu 默认认为 硬件时钟是 UTC,但 Windows 默认认为是本地时间,双系统会冲突。
查看:
timedatectl | grep RTC
若看到:
RTC in local TZ: yes
就可能偏移。
✅ 解决(推荐 UTC):
sudo timedatectl set-local-rtc 0
时间服务未运行会导致时间漂移。
检查:
timedatectl status
应看到:
System clock synchronized: yes
NTP service: active
✅ 修复:
sudo apt install chrony
sudo systemctl enable --now chrony
或:
sudo apt install ntpdate
sudo ntpdate pool.ntp.org
容器默认使用宿主机时间,但可能:
TZdocker run -e TZ=Asia/Shanghai ...
不同语言默认行为不同:
| 语言 | 默认 |
|---|---|
| C / Python | UTC |
| JavaScript | 本地时间 |
| Java | 本地时间 |
示例(Python):
import time
time.time() # 永远 UTC
某些情况:
date
date -u
timedatectl
cat /etc/timezone
可以告诉我:
我可以直接帮你定位到具体原因。