Linux系统时间

备注

Arch Linux 安装后,发现系统时间是UTC时间,和本地时间差8小时。所以整理一下系统时间设置方法

在操作系统中,时间(时钟)是由3部分确定:

  • 时间值

  • 本地时间还是UTC或者其他时区

  • 是否使用夏令时(DST)

大多数操作系统的标准做法是:

  • 操作系统启动时根据硬件时钟设置系统时钟

  • 保持系统时钟准确(通过 ntp服务 )

  • 关机时从根据系统时钟设置硬件时钟

硬件时钟

  • 查看硬件时钟:

    hwclock --show
    

例如显示输出:

2022-11-10 14:57:34.941004+00:00

根据系统时钟设置硬件时钟

可以根据系统时钟来矫正硬件时钟,此时会更新 /etc/adjtime

hwclock --systohc

系统时钟

系统时钟(system clock)也称为软件时钟(software clock),保持跟踪: 时间,时区以及夏令时。这个系统时钟通过内核来计算从1970年1月1日午夜开始的秒数。这个系统时钟初始化时候时从硬件时钟开始的,然后根据 /etc/adjtime 。当启动完成,系统时钟的运行就不依赖于硬件间时钟了,内核会通过计算计时器中断(timer interrupts)来保持系统时钟准确。

读取系统时钟

  • 检查系统时钟:

    timedatectl
    

显示输出:

               Local time: Thu 2022-11-10 15:20:13 UTC
           Universal time: Thu 2022-11-10 15:20:13 UTC
                 RTC time: Thu 2022-11-10 15:20:13
                Time zone: n/a (UTC, +0000)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
  • 可以使用 timedatectl 命令手工设置时间:

    timedatectl set-time "yyyy-MM-dd hh:mm:ss"
    

时间标准

有两种时间标准:本地时间和协调世界时 (UTC)。本地时间标准取决于当前时区,而 UTC 是全球时间标准,与时区值无关。

硬件时钟(CMOS时钟,BIOS时间)使用的标准是由操作系统设定的。默认情况下,Windows 使用本地时间,macOS 使用 UTC,如果一台机器上安装了多个操作系统,它们都会从同一个硬件时钟中获取当前时间:建议将其设置为 UTC 以避免跨系统冲突。

备注

这次我是在 MacBook Pro上安装 Arch Linux ,笔记本之前安装的是macOS,然后抹除重新安装Linux

时区

  • 检查可用时区:

    timedatectl list-timezones
    

这里可以找到上海的时区: Asia/Shanghai

  • 设置时区:

    timedatectl set-timezone Asia/Shanghai
    

设置完成后,就可以看到现在显示的是上海本地时间,而不是之前的UTC时间了(使用 date 命令):

Thu Nov 10 23:28:41 CST 2022

此时可以看到 /etc/localtime 被链接到时区文件:

lrwxrwxrwx 1 root root 35 Nov 10 23:28 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

时钟同步

应该 部署NTP服务(集群) 来保障网络时钟同步,建议采用 chrony ntp服务 ,通过 使用chrony同步时间

参考