目的

在英国读书期间装了个 Ubuntu 双系统。在这之后,只要开机进入了 Ubuntu,再重启回到 Windows,系统时间就会变回英国时间。

这是因为 Linux 默认将硬件时钟当作 UTC,而 Windows 当作本地时间,双系统切换时容易互相覆盖。其实这不是什么大问题,但是一些特殊软件需要正确的系统时间(是啥我就不说了),所以每次开机都需要手动同步 Internet 时间,真 tm 苦不堪言。

方法

添加一个 Windows 任务计划,让系统启动后立即同步服务器时间。只要保证网络畅通即可,不需要任何插件。

  1. 添加计划任务:打开 cmd,输入 taskschd.msc 打开计划任务窗口,任务计划程序库 → 创建任务
  2. 设置任务名称:开机即同步时间。描述设置为:系统启动后自动向服务器同步一次时间。前提是系统已经配置 Internet 时间
  3. 安全选项:选择「不管用户是否登录都要运行 (W)」并勾选「不存储密码 (P)...」和「使用最高权限运行 (I)」。如下图所示:

  1. 触发器选项卡:点击「新建」,开始任务选择「启动时」,高级设置勾选「延迟任务时间」并设置 30 秒(等待网络连接,无网络则时间同步会失败),勾选「已启用」。配置完后点击「确定」,如下图所示:

  1. 操作选项卡:点击「新建」,操作默认为「启动程序」,程序或脚本 (P) 填入:

    %windir%\system32\cmd.exe
    

    添加参数(可选)填入:

    /c w32tm /resync
    

    如下图所示:

  1. 条件选项卡:在「网络」中勾选「只有在以下网络连接可用时才启动 (Y)」,并选择实际的网络。该网络必须是时间服务器所使用的网络。因为上面设置了延迟 30 秒启动,如果能保证网络在 30 秒内正常就绪,则此项可忽略。

  1. 切换到「设置」选项卡,勾选「如果过了计划开始时间,立即启动任务」和「如果任务失败,按以下频率重新启动」,其他保持默认:

  1. 点击确定按钮,此时添加了一条计划任务。每次启动或重启系统后,会自动同步一次时间。

参考文章

[1] Windows 开机自动同步时间 - xjournal - 博客园 (cnblogs.com)