Tom*_*ale 7 arch-linux date timezone clock manjaro
在我的 Manjaro linux 机器上,我有一个文件/etc/timezone
,其中包含:
Asia/Bangkok
Run Code Online (Sandbox Code Playgroud)
另一个 Manjaro 论坛用户也有相同的文件。该线程总体上包含有关此问题的一些现有技术。
奇怪的是timedatectl status
不使用这个文件来报告Region/City
. 这是初始状态:
$ timedatectl status
Local time: Fri 2018-06-29 11:01:28 +07
Universal time: Fri 2018-06-29 04:01:28 UTC
RTC time: Fri 2018-06-29 04:01:28
Time zone: Asia/Bangkok (+07, +0700)
System clock synchronized: no
systemd-timesyncd.service active: no
RTC in local TZ: no
Run Code Online (Sandbox Code Playgroud)
现在我/etc/localtime
用它指向的文件内容覆盖符号链接:
$ sudo ln -f "$(realpath /etc/localtime)" /etc/localtime
$ timedatectl status
Local time: Fri 2018-06-29 04:04:03 UTC
Universal time: Fri 2018-06-29 04:04:03 UTC
RTC time: Fri 2018-06-29 04:04:04
Time zone: n/a (UTC, +0000)
System clock synchronized: no
systemd-timesyncd.service active: no
RTC in local TZ: no
Run Code Online (Sandbox Code Playgroud)
请注意本地时间更改以匹配 UTC 和n/a
时区。
因此,timedatectl
不会从 读取/etc/timezone
,timedatectl set-timezone
也不会写入/etc/timezone
。
除了那个猜测,我的/etc/timezone
还是个谜。
GNU libc(以及任何非嵌入式 Linux)读取/etc/localtime
以确定系统的时区(如果没有被TZ
环境变量或特定于应用程序的设置覆盖,则为默认时区)。*BSD 做同样的事情。一些嵌入式 Linux 系统以不同的方式做事。
/etc/localtime
应该是指向/usr/share/zoneinfo/
. 普通应用程序不介意,它们只读取文件的内容,但系统管理实用程序(例如)timedatectl
更关心,因为它们也可以更改设置,并且它们会通过更改符号链接的目标来实现。
Java 做了(或做了?)了不同的事情:它读取/etc/timezone
,其中包含一个时区名称,它应该是相对于/usr/share/zoneinfo
. 我不知道有任何其他程序使用/etc/timezone
,我不知道为什么 Sun 选择以与世界其他地方不同的方式做事。