# 解决Windows 10与Ubuntu 18.04双系统机器上Windows时间同步有误的问题

> 作者：zning（https://ning.ae） · 发布：2019/07/13 18:39 下午 (UTC+8) · 原文：https://zning.me/15630143637063.html

[接前文，安装完Windows 10与Ubuntu 18.04双系统](./15630136084061.html)之后，发现个问题：每次进Ubuntu后，下次再进Windows发现时间总是异常的差了8小时。后来搜了下资料发现了问题并解决。现简单总结下解决方式。

> 注意：本文首次撰写于2019-07-13，最近修改时间为2019-07-13，请注意相关程序的可用性与安全性。

## 问题原因

Ubuntu和Windows默认的时间管理方式不同，所以双系统发生时间错乱是正常的。

Ubuntu默认时间是把BIOS时间当成GMT+0时间，也就是世界标准时，而我国在东八区（GMT+8），所以如果你的Ubuntu位置是中国的话你系统显示的时间就是BIOS时间+8小时, 假如现在是早上8点，那么你Ubuntu会显示8点。

而当你切换到Windows系统时就会发生时间错乱，因为Windows会认为BIOS时间就是你的本地时间，结果就是Windows显示时间为0点。而假如你在Windows下同步时间，恢复显示为8点，这时BIOS时间也会被Windows改写成8点。

## 问题解决

Ubuntu 16.04(不含)以前的系统，可以编辑下面的文件通过调整Ubuntu关闭UTC功能。

```shell
sudo vim /etc/default/rcS
```

找到`UTC=yes`这一行，改成`UTC=no`，保存即可，时间修改立即生效。

Ubuntu 16.04及以后的系统，此文件已经没有了，我们通过安装`ntpdate`更新时间并写入BIOS来解决这个问题。

```shell
sudo apt-get install -y ntpdate
sudo ntpdate time5.aliyun.com
```

安装并更新时间后，接下来写入硬件：

```shell
sudo hwclock --localtime --systohc
```

不过，后面这个解决方案对于18.04好像有点特别。使用后面`ntpdate`的解决方案隔一段时间问题又会发生。再次执行上面的命令就好了，但是这不是长久之计。秉着一劳永逸的原则，将上面的内容做成脚本设为系统服务，并设置开机启动执行，这样就可以解决这个问题了。

脚本内容，我的放置位置是`/etc/timeUTC.sh`

```shell
#!/bin/bash
sudo ntpdate time5.aliyun.com
sudo hwclock --localtime --systohc
```

建立文件`/etc/systemd/system/timeUTC.service`，写入如下内容：

```service
[Unit]
After=syslog.target network.target

[Service]
ExecStart=/etc/timeUTC.sh

[Install]
WantedBy=multi-user.target
```

依次执行如下命令，使其自启生效：

```shell
sudo systemctl daemon-reload
sudo systemctl enable timeUTC.service
```

运行命令并查看命令情况，如果没有`failed`报错，显示`inactive`(即正常执行并退出脚本)即为正常：

```shell
sudo systemctl start timeUTC
sudo systemctl status timeUTC
```

## 参考文献

1. [解决Windows与Ubuntu双系统时间同步问题](https://blog.csdn.net/gatieme/article/details/51883981)
2. [Ubuntu 16.04 LTS与windows双系统时间同步解决方法](https://blog.csdn.net/kh896424665/article/details/54784022)
