同步 Linux 双系统的时间
装过 Windows × Linux 双系统的同学都会知道,默认情况下 Windows 与 Linux 的时间是不同步的,原因在于 Windows 默认使用中国标准时间 (CST),而类 Unix 系统则更喜欢使用世界协调时间 (UTC),这两者都可以表示中国时区 (东八区) 的时间但并不兼容,相差正好 8 个小时。
以前用 Windows × Ubuntu 的双系统没怎么在意这个问题,因为 Ubuntu 是主力机 Windows 用的少,另外有 NTP 自动对时,也没出过什么问题。但换到 Windows × Manjaro 双系统后,出事了!QAQ Manjaro 默认没有开启 NTP,而 Windows 却对了时,导致今天后本机时间比实际时间快了 8 个小时。然后就发生了 git 提交到了未来这种诡异的情况。
今天说什么也得解决这一问题,而且解决方法并没有想象中这么难。大体上有两种思路:
- 让 Windows 使用 UTC (推荐)
- 让 Linux 使用 RTC (CST)
让 Windows 使用 UTC🔗
Windows 一般会将 BIOS 时间 (RTC) 设置为地方时。但实际上 Windows 也能处理 UTC,需要修改注册表。
使用 regedit,新建如下 DWORD
值,并将其值设为十六进制的 1。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal
也可以用管理员权限启动命令行来完成:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
如果以上操作不起作用,并且你使用的是 Windows 64位系统,将 DWORD
修改为 QWORD
。
如果 Windows 要求根据夏令时更新时钟,可以允许。时钟仍然是 UTC,仅是显示时间会改变。
设置时间标准后需要重新启动才会生效。
让 Linux 使用 RTC (CST)🔗
另一个思路就是让 Linux 使用 CST,但 Linux 默认并不能直接使用 CST,不过我们可以设置 Linux 使用 BIOS 时间 (RTC),其实就相当于让 Linux 使用 CST,缺点是用不了夏令时了,不过在中国也就无所谓了。
要想让 Linux 使用 RTC,首先要确保时区正确
timedatectl status
如果时区 (Time zone) 不是 Asia/Shanghai
,则使用下面的命令切换时区
timedatectl set-timezone Asia/Shanghai
命令会创建一个 /etc/localtime
软链接,指向 /usr/share/zoneinfo/
中的时区文件,如果手动创建此链接请确保是相对链接而不是绝对链接,参阅 archlinux(7)
然后在命令行中运行
timedatectl set-local-rtc true
然后使用以下命令查看状态
timedatectl status
如果 RTC 与 CST 相同就说明设置成功了。
Manjaro 启动 NTP 自动对时🔗
Manjaro 默认没有启动 NTP 自动对时,你需要手动配置与启动。
首先需要配置一下 /etc/systemd/timesyncd.conf
,取消 #NTP=
的注释。然后填上 NTP 服务器的地址。这里推荐两组 NTP 服务器的域名
阿里巴巴 NTP
NTP=time1.aliyun.com time2.aliyun.com time3.aliyun.com time4.aliyun.com time5.aliyun.com time6.aliyun.com time7.aliyun.com
Apple NTP
NTP=time1.apple.com time2.apple.com time3.apple.com time4.apple.com time5.apple.com time6.apple.com time7.apple.com
然后使用以下命令启动 NTP
timedatectl set-ntp true
然后使用以下命令查看 NTP 的状态
timedatectl timesync-status