Contents

在Linux中获取当前系统时区

1. 概述

在本教程中,我们将研究在 Linux 中获取系统时区的不同方法。

2.时区表示

有几种表示时区的方式。一方面,它们可以简单地表示为其名称的缩写。例如,东部标准时间(北美)通常缩写为 EST。除此之外,它们还可以表示为与 UTC 的偏移量。例如,EST 时区是 UTC-4。最后,每个时区也可以用它在 IANA 时区数据库中的指定名称来表示,例如America/New_York

3. TZ环境变量

在 Linux 中,TZ环境变量指定系统的时区。如果设置,则优先作为系统的时区。要检查它的值,只需使用echo 命令将内容打印到控制台:

$ echo $TZ
Europe/Madrid

4. date命令

date 命令是一个命令行工具,用于处理系统的日期和时间。使用 date命令,我们可以获得时区缩写名称或其等效的 UTC 偏移量date命令接受一个格式参数, 它允许我们以偏移量或缩写名称输出时区信息。

例如,要获取时区的缩写名称,我们可以使用*%Z格式的date*命令:

$ date +%Z
CEST

除此之外,我们还可以使用 %z格式以 UTC 偏移表示打印时区:

$ date +%z
+0200

偏移量告诉我们当前系统时区比 UTC 早 2 小时。

5. timedatectl

对于systemd 附带的所有 Linux 发行版,timedatectl 命令为我们提供了系统的详细时间信息。此信息包括 UTC 时间、本地时间以及系统的时区。

$ timedatectl
               Local time: Tue 2022-05-03 08:01:41 CEST
           Universal time: Tue 2022-05-03 06:01:41 UTC 
                 RTC time: Tue 2022-05-03 06:01:41     
                Time zone: Europe/Madrid (CEST, +0200) 
System clock synchronized: yes                         
              NTP service: active                      
          RTC in local TZ: no

从输出中,我们可以看到时区的不同表示与当前日期和时间一起打印。

此外,我们可以传入show参数以机器可读的格式打印信息

$ timedatectl show
Timezone=Europe/Madrid
LocalRTC=no
CanNTP=yes
NTP=yes
NTPSynchronized=yes
TimeUSec=Fri 2022-05-03 06:01:47 CEST
RTCTimeUSec=Fri 2022-05-03 06:01:46 CEST

6.  /etc/localtime文件

**我们还可以从/etc/localtime 文件中获取时区信息。**事实上,  timedatectl命令实际上是从这个文件中读取的。

/etc/localtime文件是实际时区二进制文件的符号链接。 要获取该值,我们可以通过运行ls -l检查它所指向的实际时区文件:

$ ls -l /etc/localtime
lrwxrwxrwx 1 user user 33 Dec 29 09:44 /etc/localtime -> /usr/share/zoneinfo/Europe/Madrid

从符号链接中,我们可以直接识别出系统的时区设置为欧洲/马德里。

或者,我们可以使用 zdump 命令立即读取二进制文件的内容

$ zdump /etc/localtime
/etc/localtime  Tue May  3 08:16:16 2022 CEST

除了时区,  zdump命令还打印系统在给定时区的当前日期和时间。

7.  /etc/timezone文件

最后,*还有一个/etc/timezone*文件,它以纯文本格式存储系统的时区。**我们可以使用cat 命令简单地读取时区:

$ cat /etc/timezone
Europe/Madrid