在 CentOS(以及大多数 Linux 系统)中,“时间戳有偏差”通常不是系统时间函数本身的问题,而是系统时间、时区、硬件时钟或同步机制导致的。下面按常见原因逐一说明。
先明确一下,常见几种情况:
date +%s 得到的时间戳time() / System.currentTimeMillis() 等下面分别解释。
CentOS 默认可能是 UTC,而你是按中国时间看。
查看时区:
timedatectl
如果看到:
Time zone: UTC
而中国时间是 CST (UTC+8)
解决:
timedatectl set-timezone Asia/Shanghai
✅ 注意:
date +%s(Unix 时间戳)不受时区影响
只有“显示出来的时间”受时区影响
CentOS 如果没同步时间,时间会慢慢漂移。
检查:
timedatectl status
看是否有:
NTP enabled: no
CentOS 7 开启 NTP:
yum install -y ntp
systemctl enable ntpd
systemctl start ntpd
CentOS 8 / Stream:
dnf install -y chrony
systemctl enable chronyd
systemctl start chronyd
CentOS 启动时会从主板 CMOS 读取时间。
查看:
hwclock --show
date
如果差很多,可能是:
修复:
hwclock --systohc
或修改:
timedatectl set-local-rtc 1 # 或 0
检查:
date
cat /etc/timezone
解决(容器里):
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
例如:
示例(Java):
System.setProperty("user.timezone", "Asia/Shanghai");
结果:
解决(Linux 侧):
timedatectl set-local-rtc 1
timedatectl
date
date +%s
hwclock --show
你可以补充:
date 显示不对,还是程序时间戳不对我可以直接给你针对性的修复命令。