计算机系统中的时间

1. 计算机系统中涉及的时间类型

计算机系统中涉及多种时间类型,主要类型有下述几种:

  • RTC时间(REAL-TIME CLOCK, 实时时钟)

    实时时钟是 PC 主板上的晶振及相关电路组成的时钟电路的生成脉冲,它控制着计算机系统的时间。操作系统中所提到的 RTC,指的就是在计算机主板控制下的时间,即系统时间,为计算机硬件的内部时钟

  • UTC时间(Universal Time Coordinated,通用协调时)

    通用协调时是最主要的世界时间标准,是由国际无线电咨询委员会规定和推荐,并由国际时间局(BIH)负责保持的以秒为基础的时间标度,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。

  • GMT时间(GMT, Greenwich Mean Time,格林尼治平均时)

    格林尼治平均时是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。

    英语中,UTC 和 GMT 常作为同义词使用。实践中,UTC 与 GMT 大致重合,其时间的值基本一致,即可以认为

    UTC == GMT

    但是,它们在本质上各不相同。前者以原子时为依据,是确定时间值的标准,而后者则是时区上的概念,作为世界上不同地区人口生活的时间参照。

  • CST时间(China Standard Time,中国标准时间)

    中国标准时间是中国所在的东八区时间。其时间与 UTC 时间相差 8 小时,即
    UTC(GMT) + 8 = CST(北京时间)

一个计算机操作系统中,上述几种时间均有涉及。如在 Ubuntu 18.04 下,执行 timedatectl,可得

gogetter@gogetter-ThinkPad:~$ timedatectl 

                      Local time: 四 2018-11-08 22:42:06 CST
                  Universal time: 四 2018-11-08 14:42:06 UTC
                        RTC time: 四 2018-11-08 14:42:06
                       Time zone: Asia/Shanghai (CST, +0800)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: yes

2. 多操作系统的时间同步问题

不同操作系统,对时间的理解不同,选取标准也不同。如此,也造成了一个计算机系统上安装多种操作系统时,时间不同步的问题。

在安装 Ubuntu 和 Windows 双系统的情况下,Ubuntu 的时间总会和 Windows 的时间相差 8 小时。原因在于,Windows 和 Ubuntu 都会以硬件时间(BIOS时间)作为时间基点,进行本地时间换算,区别在于,Windows 和 Ubuntu 对于 BIOS 时间的理解有所不同Windows 很直接,认为 BIOS 时间即为本地时间,Ubuntu 认为 BIOS 时间是 UTC 时间,本地时间需要利用 UTC 进行换算。操作系统最终呈现时间为 local time,即为东八区 CST 时间。如上例所示,RTC 时间即为 BIOS 时间,Windows 系统直接认为硬件时间就是本地时间,BIOS 时间就是 local time,即 14:42:06;而 Ubuntu 认为 local time 为 UTC 时间(即 BIOS 时间)+ 8,即 14:42:06 + 8 = 22:42:06。如此一来,造成两个系统时间相差 8 个小时。

时间同步调整方法

1). 改 Ubuntu 设置

不对 Windows 进行修改,改变 Ubuntu 对 BIOS 时间的理解。使得 Ubuntu 将 BIOS 时间的理解由 UTC 时间改为 local time,即将硬件时间由 Ubuntu 默认的 UTC 改为 CST,

sudo timedatectl set-local-rtc 1

重启后生效。

2). 改 Windows 设置

不对 Ubuntu 进行修改,改变 Windows 对时间的理解。调整 Windows 设置,使其与 Ubuntu 一样,也将硬件时间当做 UTC,而不是默认的 local time。

在注册表项 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControl/SetControlTimeZoneInformation 中添加一个名为 RealTimeIsUniversal 的值,类型为 REG_DWORD,数据为 1

发表评论

电子邮件地址不会被公开。 必填项已用*标注