Skip to main content

时间相关的指南

本地时间和UTC时间

TL;DR:

  • Windows 认为 硬件时间为当地时间(OS和UEFI里看到的是一样的)
  • Linux 认为 硬件时间是 UTC时间,系统根据时区format显示当地的时间(UEFI为UTC,OS根据选择的时区自适应)

啰嗦:

https://www.zhihu.com/question/46525639/answer/157272414

Windows 与 Mac/Linux 看待系统硬件时间的方式是不一样的:

Windows把计算机硬件时间当作本地时间(local time),所以在Windows系统中显示的时间跟BIOS中显示的时间是一样的。

Linux/Unix/Mac把计算机硬件时间当作 UTC, 所以在Linux/Unix/Mac系统启动后在该时间的基础上,加上电脑设置的时区数( 比如我们在中国,它就加上“8” ),因此,Linux/Unix/Mac系统中显示的时间总是比Windows系统中显示的时间快8个小时。

所以,当你在Linux/Unix/Mac系统中,把系统现实的时间设置正确后,其实计算机硬件时间是在这个时间上减去8小时,所以当你切换成Windows系统后,会发现时间慢了8小时。就是这样个原因。

OK!既然知道原因了,就好解决了。

解决办法(推荐)

在UEFI中看到本地时间是符合人类直觉的,所以Windows方案胜出,那么就是修改Linux禁用UTC即可。

# timedatectl
timedatectl set-local-rtc 1 --adjust-system-clock

或者 直接编辑 adjtime


vim /etc/adjtime
# UTC 修改为 LOCAL

# 写入当前时间到硬件
hwclock -w
# Ubuntu 16.04 版本以前:
# 将UTC=yes改成UTC=no
vim /etc/default/rcS

被解决办法

UTC一统天下,让Windows来适应。

reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

时区

UTC即Universal Time Coordinated,协调世界时(世界统一时间)

GMT 即Greenwich Mean Time,格林尼治平时

设置时区

# 查看当前
date -R

# 查看当前可用时区 过滤上海
timedatectl list-timezones | grep Shanghai

# 设置到上海时区
sudo timedatectl set-timezone Asia/Shanghai

时间同步

同步时间工具

1. 查看当前时间和时区及其他状态

timedatectl

2. 设置 NTP 同步

需要预装 ntp

timedatectl set-ntp true

x. 同步BIOS到OS时间

hwclock -s

x. 同步OS到BIOS时间

hwclock -w